lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20220708202951.46d3454a@kernel.org> Date: Fri, 8 Jul 2022 20:29:51 -0700 From: Jakub Kicinski <kuba@...nel.org> To: David Lamparter <equinox@...c24.net> Cc: netdev@...r.kernel.org, "David S. Miller" <davem@...emloft.net>, Eric Dumazet <edumazet@...gle.com>, Nikolay Aleksandrov <razor@...ckwall.org>, David Ahern <dsahern@...nel.org> Subject: Re: [PATCH net-next v5] net: ip6mr: add RTM_GETROUTE netlink op Few more nit picks, sorry.. On Thu, 7 Jul 2022 11:33:36 +0200 David Lamparter wrote: > +static int ip6mr_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, > + struct netlink_ext_ack *extack) > +{ > + struct net *net = sock_net(in_skb->sk); > + struct in6_addr src = {}, grp = {}; > + struct nlattr *tb[RTA_MAX + 1]; > + struct sk_buff *skb = NULL; Should be unnecessary if the code is right, let the compiler warn us about uninitialized variables. > + struct mfc6_cache *cache; > + struct mr_table *mrt; > + u32 tableid; > + int err; > + > + err = ip6mr_rtm_valid_getroute_req(in_skb, nlh, tb, extack); > + if (err < 0) > + goto errout; Can we: return err; ? I don't know where the preference for jumping to the return statement came from, old compilers? someone's "gut feeling"? > + if (tb[RTA_SRC]) > + src = nla_get_in6_addr(tb[RTA_SRC]); > + if (tb[RTA_DST]) > + grp = nla_get_in6_addr(tb[RTA_DST]); > + tableid = tb[RTA_TABLE] ? nla_get_u32(tb[RTA_TABLE]) : 0; > + > + mrt = ip6mr_get_table(net, tableid ? tableid : RT_TABLE_DEFAULT); tableid ? : RT_TABLE_DEFAULT or tableid ?: RT_TABLE_DEFAULT the abbreviated version of the ternary operator is used quite commonly in the kernel. > + if (!mrt) { > + NL_SET_ERR_MSG_MOD(extack, "MR table does not exist"); > + err = -ENOENT; > + goto errout_free; Ditto, just return, if not goto errout; there's nothing to free. > + } > + > + /* entries are added/deleted only under RTNL */ > + rcu_read_lock(); > + cache = ip6mr_cache_find(mrt, &src, &grp); > + rcu_read_unlock(); > + if (!cache) { > + NL_SET_ERR_MSG_MOD(extack, "MR cache entry not found"); > + err = -ENOENT; > + goto errout_free; > + } > + > + skb = nlmsg_new(mr6_msgsize(false, mrt->maxvif), GFP_KERNEL); > + if (!skb) { > + err = -ENOBUFS; > + goto errout_free; > + } > + > + err = ip6mr_fill_mroute(mrt, skb, NETLINK_CB(in_skb).portid, > + nlh->nlmsg_seq, cache, RTM_NEWROUTE, 0); > + if (err < 0) > + goto errout_free; now this is the only case which actually needs to free the skb > + > + err = rtnl_unicast(skb, net, NETLINK_CB(in_skb).portid); > + > +errout: > + return err; when the label is gone you can: return rtnl_unicast(... directly. > + > +errout_free: > + kfree_skb(skb); > + goto errout; and no need to do the funky backwards jump here either, IMO > +}
Powered by blists - more mailing lists