Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa701bd2 authored by Krzysztof Halasa's avatar Krzysztof Halasa Committed by Jeff Garzik
Browse files

WAN: protect HDLC proto list while insmod/rmmod



WAN: protect protocol list in hdlc.c with RTNL.

Signed-off-by: default avatarKrzysztof Hałasa <khc@pm.waw.pl>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 4ecc8c06
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -43,8 +43,7 @@ static const char* version = "HDLC support module revision 1.22";

#undef DEBUG_LINK

static struct hdlc_proto *first_proto = NULL;

static struct hdlc_proto *first_proto;

static int hdlc_change_mtu(struct net_device *dev, int new_mtu)
{
@@ -314,21 +313,25 @@ void detach_hdlc_protocol(struct net_device *dev)

void register_hdlc_protocol(struct hdlc_proto *proto)
{
	rtnl_lock();
	proto->next = first_proto;
	first_proto = proto;
	rtnl_unlock();
}


void unregister_hdlc_protocol(struct hdlc_proto *proto)
{
	struct hdlc_proto **p = &first_proto;
	while (*p) {
		if (*p == proto) {
			*p = proto->next;
			return;
		}
	struct hdlc_proto **p;

	rtnl_lock();
	p = &first_proto;
	while (*p != proto) {
		BUG_ON(!*p);
		p = &((*p)->next);
	}
	*p = proto->next;
	rtnl_unlock();
}