Loading include/linux/netlink.h +2 −1 Original line number Diff line number Diff line Loading @@ -160,7 +160,8 @@ extern int netlink_unregister_notifier(struct notifier_block *nb); /* finegrained unicast helpers: */ struct sock *netlink_getsockbyfilp(struct file *filp); int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock, long timeo); int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock, long timeo, struct sock *ssk); void netlink_detachskb(struct sock *sk, struct sk_buff *skb); int netlink_sendskb(struct sock *sk, struct sk_buff *skb, int protocol); Loading include/net/irda/irlap.h +3 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,9 @@ /* May be different when we get VFIR */ #define LAP_MAX_HEADER (LAP_ADDR_HEADER + LAP_CTRL_HEADER) /* Each IrDA device gets a random 32 bits IRLAP device address */ #define LAP_ALEN 4 #define BROADCAST 0xffffffff /* Broadcast device address */ #define CBROADCAST 0xfe /* Connection broadcast address */ #define XID_FORMAT 0x01 /* Discovery XID format */ Loading ipc/mqueue.c +2 −1 Original line number Diff line number Diff line Loading @@ -1018,7 +1018,8 @@ asmlinkage long sys_mq_notify(mqd_t mqdes, goto out; } ret = netlink_attachskb(sock, nc, 0, MAX_SCHEDULE_TIMEOUT); ret = netlink_attachskb(sock, nc, 0, MAX_SCHEDULE_TIMEOUT, NULL); if (ret == 1) goto retry; if (ret) { Loading net/bridge/br_if.c +64 −30 Original line number Diff line number Diff line Loading @@ -79,9 +79,14 @@ static int port_cost(struct net_device *dev) */ static void port_carrier_check(void *arg) { struct net_bridge_port *p = arg; struct net_device *dev = arg; struct net_bridge_port *p; rtnl_lock(); p = dev->br_port; if (!p) goto done; if (netif_carrier_ok(p->dev)) { u32 cost = port_cost(p->dev); Loading @@ -97,19 +102,33 @@ static void port_carrier_check(void *arg) br_stp_disable_port(p); spin_unlock_bh(&p->br->lock); } done: rtnl_unlock(); } static void release_nbp(struct kobject *kobj) { struct net_bridge_port *p = container_of(kobj, struct net_bridge_port, kobj); kfree(p); } static struct kobj_type brport_ktype = { #ifdef CONFIG_SYSFS .sysfs_ops = &brport_sysfs_ops, #endif .release = release_nbp, }; static void destroy_nbp(struct net_bridge_port *p) { struct net_device *dev = p->dev; dev->br_port = NULL; p->br = NULL; p->dev = NULL; dev_put(dev); br_sysfs_freeif(p); kobject_put(&p->kobj); } static void destroy_nbp_rcu(struct rcu_head *head) Loading @@ -133,24 +152,24 @@ static void del_nbp(struct net_bridge_port *p) struct net_bridge *br = p->br; struct net_device *dev = p->dev; /* Race between RTNL notify and RCU callback */ if (p->deleted) return; sysfs_remove_link(&br->ifobj, dev->name); dev_set_promiscuity(dev, -1); cancel_delayed_work(&p->carrier_check); flush_scheduled_work(); spin_lock_bh(&br->lock); br_stp_disable_port(p); p->deleted = 1; spin_unlock_bh(&br->lock); br_fdb_delete_by_port(br, p); list_del_rcu(&p->list); rcu_assign_pointer(dev->br_port, NULL); kobject_del(&p->kobj); call_rcu(&p->rcu, destroy_nbp_rcu); } Loading @@ -160,7 +179,6 @@ static void del_br(struct net_bridge *br) struct net_bridge_port *p, *n; list_for_each_entry_safe(p, n, &br->port_list, list) { br_sysfs_removeif(p); del_nbp(p); } Loading Loading @@ -254,13 +272,17 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br, p->dev = dev; p->path_cost = port_cost(dev); p->priority = 0x8000 >> BR_PORT_BITS; dev->br_port = p; p->port_no = index; br_init_port(p); p->state = BR_STATE_DISABLED; INIT_WORK(&p->carrier_check, port_carrier_check, p); INIT_WORK(&p->carrier_check, port_carrier_check, dev); kobject_init(&p->kobj); kobject_set_name(&p->kobj, SYSFS_BRIDGE_PORT_ATTR); p->kobj.ktype = &brport_ktype; p->kobj.parent = &(dev->class_dev.kobj); p->kobj.kset = NULL; return p; } Loading Loading @@ -388,15 +410,23 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) if (dev->br_port != NULL) return -EBUSY; if (IS_ERR(p = new_nbp(br, dev))) p = new_nbp(br, dev); if (IS_ERR(p)) return PTR_ERR(p); if ((err = br_fdb_insert(br, p, dev->dev_addr))) destroy_nbp(p); err = kobject_add(&p->kobj); if (err) goto err0; else if ((err = br_sysfs_addif(p))) del_nbp(p); else { err = br_fdb_insert(br, p, dev->dev_addr); if (err) goto err1; err = br_sysfs_addif(p); if (err) goto err2; rcu_assign_pointer(dev->br_port, p); dev_set_promiscuity(dev, 1); list_add_rcu(&p->list, &br->port_list); Loading @@ -404,14 +434,19 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) spin_lock_bh(&br->lock); br_stp_recalculate_bridge_id(br); br_features_recompute(br); if ((br->dev->flags & IFF_UP) && (dev->flags & IFF_UP) && netif_carrier_ok(dev)) br_stp_enable_port(p); schedule_delayed_work(&p->carrier_check, BR_PORT_DEBOUNCE); spin_unlock_bh(&br->lock); dev_set_mtu(br->dev, br_min_mtu(br)); } kobject_uevent(&p->kobj, KOBJ_ADD); return 0; err2: br_fdb_delete_by_port(br, p); err1: kobject_del(&p->kobj); err0: kobject_put(&p->kobj); return err; } Loading @@ -423,7 +458,6 @@ int br_del_if(struct net_bridge *br, struct net_device *dev) if (!p || p->br != br) return -EINVAL; br_sysfs_removeif(p); del_nbp(p); spin_lock_bh(&br->lock); Loading net/bridge/br_input.c +12 −7 Original line number Diff line number Diff line Loading @@ -45,18 +45,20 @@ static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb) int br_handle_frame_finish(struct sk_buff *skb) { const unsigned char *dest = eth_hdr(skb)->h_dest; struct net_bridge_port *p = skb->dev->br_port; struct net_bridge *br = p->br; struct net_bridge_port *p = rcu_dereference(skb->dev->br_port); struct net_bridge *br; struct net_bridge_fdb_entry *dst; int passedup = 0; if (!p || p->state == BR_STATE_DISABLED) goto drop; /* insert into forwarding database after filtering to avoid spoofing */ br_fdb_update(p->br, p, eth_hdr(skb)->h_source); br = p->br; br_fdb_update(br, p, eth_hdr(skb)->h_source); if (p->state == BR_STATE_LEARNING) { kfree_skb(skb); goto out; } if (p->state == BR_STATE_LEARNING) goto drop; if (br->dev->flags & IFF_PROMISC) { struct sk_buff *skb2; Loading Loading @@ -93,6 +95,9 @@ int br_handle_frame_finish(struct sk_buff *skb) out: return 0; drop: kfree_skb(skb); goto out; } /* Loading Loading
include/linux/netlink.h +2 −1 Original line number Diff line number Diff line Loading @@ -160,7 +160,8 @@ extern int netlink_unregister_notifier(struct notifier_block *nb); /* finegrained unicast helpers: */ struct sock *netlink_getsockbyfilp(struct file *filp); int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock, long timeo); int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock, long timeo, struct sock *ssk); void netlink_detachskb(struct sock *sk, struct sk_buff *skb); int netlink_sendskb(struct sock *sk, struct sk_buff *skb, int protocol); Loading
include/net/irda/irlap.h +3 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,9 @@ /* May be different when we get VFIR */ #define LAP_MAX_HEADER (LAP_ADDR_HEADER + LAP_CTRL_HEADER) /* Each IrDA device gets a random 32 bits IRLAP device address */ #define LAP_ALEN 4 #define BROADCAST 0xffffffff /* Broadcast device address */ #define CBROADCAST 0xfe /* Connection broadcast address */ #define XID_FORMAT 0x01 /* Discovery XID format */ Loading
ipc/mqueue.c +2 −1 Original line number Diff line number Diff line Loading @@ -1018,7 +1018,8 @@ asmlinkage long sys_mq_notify(mqd_t mqdes, goto out; } ret = netlink_attachskb(sock, nc, 0, MAX_SCHEDULE_TIMEOUT); ret = netlink_attachskb(sock, nc, 0, MAX_SCHEDULE_TIMEOUT, NULL); if (ret == 1) goto retry; if (ret) { Loading
net/bridge/br_if.c +64 −30 Original line number Diff line number Diff line Loading @@ -79,9 +79,14 @@ static int port_cost(struct net_device *dev) */ static void port_carrier_check(void *arg) { struct net_bridge_port *p = arg; struct net_device *dev = arg; struct net_bridge_port *p; rtnl_lock(); p = dev->br_port; if (!p) goto done; if (netif_carrier_ok(p->dev)) { u32 cost = port_cost(p->dev); Loading @@ -97,19 +102,33 @@ static void port_carrier_check(void *arg) br_stp_disable_port(p); spin_unlock_bh(&p->br->lock); } done: rtnl_unlock(); } static void release_nbp(struct kobject *kobj) { struct net_bridge_port *p = container_of(kobj, struct net_bridge_port, kobj); kfree(p); } static struct kobj_type brport_ktype = { #ifdef CONFIG_SYSFS .sysfs_ops = &brport_sysfs_ops, #endif .release = release_nbp, }; static void destroy_nbp(struct net_bridge_port *p) { struct net_device *dev = p->dev; dev->br_port = NULL; p->br = NULL; p->dev = NULL; dev_put(dev); br_sysfs_freeif(p); kobject_put(&p->kobj); } static void destroy_nbp_rcu(struct rcu_head *head) Loading @@ -133,24 +152,24 @@ static void del_nbp(struct net_bridge_port *p) struct net_bridge *br = p->br; struct net_device *dev = p->dev; /* Race between RTNL notify and RCU callback */ if (p->deleted) return; sysfs_remove_link(&br->ifobj, dev->name); dev_set_promiscuity(dev, -1); cancel_delayed_work(&p->carrier_check); flush_scheduled_work(); spin_lock_bh(&br->lock); br_stp_disable_port(p); p->deleted = 1; spin_unlock_bh(&br->lock); br_fdb_delete_by_port(br, p); list_del_rcu(&p->list); rcu_assign_pointer(dev->br_port, NULL); kobject_del(&p->kobj); call_rcu(&p->rcu, destroy_nbp_rcu); } Loading @@ -160,7 +179,6 @@ static void del_br(struct net_bridge *br) struct net_bridge_port *p, *n; list_for_each_entry_safe(p, n, &br->port_list, list) { br_sysfs_removeif(p); del_nbp(p); } Loading Loading @@ -254,13 +272,17 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br, p->dev = dev; p->path_cost = port_cost(dev); p->priority = 0x8000 >> BR_PORT_BITS; dev->br_port = p; p->port_no = index; br_init_port(p); p->state = BR_STATE_DISABLED; INIT_WORK(&p->carrier_check, port_carrier_check, p); INIT_WORK(&p->carrier_check, port_carrier_check, dev); kobject_init(&p->kobj); kobject_set_name(&p->kobj, SYSFS_BRIDGE_PORT_ATTR); p->kobj.ktype = &brport_ktype; p->kobj.parent = &(dev->class_dev.kobj); p->kobj.kset = NULL; return p; } Loading Loading @@ -388,15 +410,23 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) if (dev->br_port != NULL) return -EBUSY; if (IS_ERR(p = new_nbp(br, dev))) p = new_nbp(br, dev); if (IS_ERR(p)) return PTR_ERR(p); if ((err = br_fdb_insert(br, p, dev->dev_addr))) destroy_nbp(p); err = kobject_add(&p->kobj); if (err) goto err0; else if ((err = br_sysfs_addif(p))) del_nbp(p); else { err = br_fdb_insert(br, p, dev->dev_addr); if (err) goto err1; err = br_sysfs_addif(p); if (err) goto err2; rcu_assign_pointer(dev->br_port, p); dev_set_promiscuity(dev, 1); list_add_rcu(&p->list, &br->port_list); Loading @@ -404,14 +434,19 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) spin_lock_bh(&br->lock); br_stp_recalculate_bridge_id(br); br_features_recompute(br); if ((br->dev->flags & IFF_UP) && (dev->flags & IFF_UP) && netif_carrier_ok(dev)) br_stp_enable_port(p); schedule_delayed_work(&p->carrier_check, BR_PORT_DEBOUNCE); spin_unlock_bh(&br->lock); dev_set_mtu(br->dev, br_min_mtu(br)); } kobject_uevent(&p->kobj, KOBJ_ADD); return 0; err2: br_fdb_delete_by_port(br, p); err1: kobject_del(&p->kobj); err0: kobject_put(&p->kobj); return err; } Loading @@ -423,7 +458,6 @@ int br_del_if(struct net_bridge *br, struct net_device *dev) if (!p || p->br != br) return -EINVAL; br_sysfs_removeif(p); del_nbp(p); spin_lock_bh(&br->lock); Loading
net/bridge/br_input.c +12 −7 Original line number Diff line number Diff line Loading @@ -45,18 +45,20 @@ static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb) int br_handle_frame_finish(struct sk_buff *skb) { const unsigned char *dest = eth_hdr(skb)->h_dest; struct net_bridge_port *p = skb->dev->br_port; struct net_bridge *br = p->br; struct net_bridge_port *p = rcu_dereference(skb->dev->br_port); struct net_bridge *br; struct net_bridge_fdb_entry *dst; int passedup = 0; if (!p || p->state == BR_STATE_DISABLED) goto drop; /* insert into forwarding database after filtering to avoid spoofing */ br_fdb_update(p->br, p, eth_hdr(skb)->h_source); br = p->br; br_fdb_update(br, p, eth_hdr(skb)->h_source); if (p->state == BR_STATE_LEARNING) { kfree_skb(skb); goto out; } if (p->state == BR_STATE_LEARNING) goto drop; if (br->dev->flags & IFF_PROMISC) { struct sk_buff *skb2; Loading Loading @@ -93,6 +95,9 @@ int br_handle_frame_finish(struct sk_buff *skb) out: return 0; drop: kfree_skb(skb); goto out; } /* Loading