> f6bvp <[email protected]> hat am 11. April 2017 um 19:26 geschrieben: > > > Hi, > > I want to acknowledge here a set of very usefull ROSE patches provided > by richard Stearn. > > Since years, it has not been possible to set rose0 device down without > creating an endless loop of kernel waiting for rose to become free. > > Richard found that a number of dev_put(dev) were missing. > > Applying the following patch subset cured the issue and allowed a clean > rose module removal. > > The following patches are part of a larger series committed by Richard > but rejected by Dave Miller mostly for format reasons. > > I selected and checked the minimal changes necessary to cure the > refcount issue. > > See : > > http://marc.info/?l=linux-hams&m=146873255413533&w=2 > > Richard does not want to jump in again. > > So I would appreciate if someone could help us by confirming that this > patch is extremely convenient. > > Then someone could submit this subset to linux-hams and linux-netdev > referees. > > 73 de Bernard, f6bvp > > ---------------------------------------- > > > diff -ruN a/net/rose/af_rose.c b/net/rose/af_rose.c > --- a/net/rose/af_rose.c 2017-04-03 19:02:14.205800053 +0200 > +++ b/net/rose/af_rose.c 2017-04-03 12:18:02.290052819 +0200 > @@ -688,8 +688,10 @@ > rose->source_call = user->call; > ax25_uid_put(user); > } else { > - if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) > + if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) { > + dev_put(dev); > return -EACCES; > + } > rose->source_call = *source; > } > > @@ -710,6 +712,7 @@ > rose_insert_socket(sk); > > sock_reset_flag(sk, SOCK_ZAPPED); > + dev_put(dev); > > return 0; > } > diff -ruN a/net/rose/rose_loopback.c b/net/rose/rose_loopback.c > --- a/net/rose/rose_loopback.c 2017-04-03 19:02:14.206800010 +0200 > +++ b/net/rose/rose_loopback.c 2017-04-03 12:18:02.291052777 +0200 > @@ -102,6 +102,7 @@ > if ((dev = rose_dev_get(dest)) != NULL) { > if (rose_rx_call_request(skb, dev, > rose_loopback_neigh, lci_o) == 0) > kfree_skb(skb); > + dev_put(dev); > } else { > kfree_skb(skb); > } > diff -ruN a/net/rose/rose_route.c b/net/rose/rose_route.c > --- a/net/rose/rose_route.c 2017-04-03 19:02:14.207799967 +0200 > +++ b/net/rose/rose_route.c 2017-04-03 12:18:02.290052819 +0200 > @@ -875,6 +875,11 @@ > src_addr = (rose_address *)(skb->data + > ROSE_CALL_REQ_SRC_ADDR_OFF); > dest_addr = (rose_address *)(skb->data + > ROSE_CALL_REQ_DEST_ADDR_OFF); > > + if (ax25 == NULL) { > + printk(KERN_ERR "rose_route_frame : called with ax25 > callback == NULL\n"); > + return res; > + } > +
you can check this more early and return 0 directly. just my 2 cents, re, wh > spin_lock_bh(&rose_neigh_list_lock); > spin_lock_bh(&rose_route_list_lock); > > -- > To unsubscribe from this list: send the line "unsubscribe linux-hams" in > the body of a message to [email protected] > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-hams" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
