mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 04:56:13 +02:00
ethtool: rss: avoid modifying the RSS context response
Gemini says that we're modifying the RSS_CREATE response skb.
I think it's right, the comment says that unicast() should
unshare the skb but I'm not entirely sure what I meant there.
netlink_trim() does a copy but only if skb is not well sized
(it's at least 2x larger than necessary for the payload).
Fixes: a166ab7816 ("ethtool: rss: support creating contexts via Netlink")
Link: https://patch.msgid.link/20260522230647.1705600-2-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
2e357f002c
commit
c75b6f6eaa
|
|
@ -981,11 +981,17 @@ ethnl_rss_create_validate(struct net_device *dev, struct genl_info *info)
|
|||
}
|
||||
|
||||
static void
|
||||
ethnl_rss_create_send_ntf(struct sk_buff *rsp, struct net_device *dev)
|
||||
ethnl_rss_create_send_ntf(const struct sk_buff *rsp, struct net_device *dev)
|
||||
{
|
||||
struct nlmsghdr *nlh = (void *)rsp->data;
|
||||
struct genlmsghdr *genl_hdr;
|
||||
struct nlmsghdr *nlh;
|
||||
struct sk_buff *ntf;
|
||||
|
||||
ntf = skb_copy_expand(rsp, 0, 0, GFP_KERNEL);
|
||||
if (!ntf)
|
||||
return;
|
||||
|
||||
nlh = nlmsg_hdr(ntf);
|
||||
/* Convert the reply into a notification */
|
||||
nlh->nlmsg_pid = 0;
|
||||
nlh->nlmsg_seq = ethnl_bcast_seq_next();
|
||||
|
|
@ -993,7 +999,7 @@ ethnl_rss_create_send_ntf(struct sk_buff *rsp, struct net_device *dev)
|
|||
genl_hdr = nlmsg_data(nlh);
|
||||
genl_hdr->cmd = ETHTOOL_MSG_RSS_CREATE_NTF;
|
||||
|
||||
ethnl_multicast(rsp, dev);
|
||||
ethnl_multicast(ntf, dev);
|
||||
}
|
||||
|
||||
int ethnl_rss_create_doit(struct sk_buff *skb, struct genl_info *info)
|
||||
|
|
@ -1104,12 +1110,8 @@ int ethnl_rss_create_doit(struct sk_buff *skb, struct genl_info *info)
|
|||
|
||||
genlmsg_end(rsp, hdr);
|
||||
|
||||
/* Use the same skb for the response and the notification,
|
||||
* genlmsg_reply() will copy the skb if it has elevated user count.
|
||||
*/
|
||||
skb_get(rsp);
|
||||
ret = genlmsg_reply(rsp, info);
|
||||
ethnl_rss_create_send_ntf(rsp, dev);
|
||||
ret = genlmsg_reply(rsp, info);
|
||||
rsp = NULL;
|
||||
|
||||
exit_unlock:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user