Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bridge: Stop using NLA_PUT*().

These macros contain a hidden goto, and are thus extremely error
prone and make code hard to audit.

Signed-off-by: David S. Miller <davem@davemloft.net>

+15 -18
+4 -4
net/bridge/br_fdb.c
··· 487 487 ndm->ndm_ifindex = fdb->dst ? fdb->dst->dev->ifindex : br->dev->ifindex; 488 488 ndm->ndm_state = fdb_to_nud(fdb); 489 489 490 - NLA_PUT(skb, NDA_LLADDR, ETH_ALEN, &fdb->addr); 491 - 490 + if (nla_put(skb, NDA_LLADDR, ETH_ALEN, &fdb->addr)) 491 + goto nla_put_failure; 492 492 ci.ndm_used = jiffies_to_clock_t(now - fdb->used); 493 493 ci.ndm_confirmed = 0; 494 494 ci.ndm_updated = jiffies_to_clock_t(now - fdb->updated); 495 495 ci.ndm_refcnt = 0; 496 - NLA_PUT(skb, NDA_CACHEINFO, sizeof(ci), &ci); 497 - 496 + if (nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci)) 497 + goto nla_put_failure; 498 498 return nlmsg_end(skb, nlh); 499 499 500 500 nla_put_failure:
+11 -14
net/bridge/br_netlink.c
··· 60 60 hdr->ifi_flags = dev_get_flags(dev); 61 61 hdr->ifi_change = 0; 62 62 63 - NLA_PUT_STRING(skb, IFLA_IFNAME, dev->name); 64 - NLA_PUT_U32(skb, IFLA_MASTER, br->dev->ifindex); 65 - NLA_PUT_U32(skb, IFLA_MTU, dev->mtu); 66 - NLA_PUT_U8(skb, IFLA_OPERSTATE, operstate); 67 - 68 - if (dev->addr_len) 69 - NLA_PUT(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr); 70 - 71 - if (dev->ifindex != dev->iflink) 72 - NLA_PUT_U32(skb, IFLA_LINK, dev->iflink); 73 - 74 - if (event == RTM_NEWLINK) 75 - NLA_PUT_U8(skb, IFLA_PROTINFO, port->state); 76 - 63 + if (nla_put_string(skb, IFLA_IFNAME, dev->name) || 64 + nla_put_u32(skb, IFLA_MASTER, br->dev->ifindex) || 65 + nla_put_u32(skb, IFLA_MTU, dev->mtu) || 66 + nla_put_u8(skb, IFLA_OPERSTATE, operstate) || 67 + (dev->addr_len && 68 + nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) || 69 + (dev->ifindex != dev->iflink && 70 + nla_put_u32(skb, IFLA_LINK, dev->iflink)) || 71 + (event == RTM_NEWLINK && 72 + nla_put_u8(skb, IFLA_PROTINFO, port->state))) 73 + goto nla_put_failure; 77 74 return nlmsg_end(skb, nlh); 78 75 79 76 nla_put_failure: