]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
hsr: Prevent use after free in prp_create_tagged_frame()
authorDan Carpenter <dan.carpenter@linaro.org>
Fri, 27 Oct 2023 12:19:01 +0000 (15:19 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:08:28 +0000 (11:08 +0100)
[ Upstream commit 876f8ab52363f649bcc74072157dfd7adfbabc0d ]

The prp_fill_rct() function can fail.  In that situation, it frees the
skb and returns NULL.  Meanwhile on the success path, it returns the
original skb.  So it's straight forward to fix bug by using the returned
value.

Fixes: 451d8123f897 ("net: prp: add packet handling support")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Link: https://lore.kernel.org/r/57af1f28-7f57-4a96-bcd3-b7a0f2340845@moroto.mountain
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/hsr/hsr_forward.c

index 12ba43023d30ec9465ca227a406b80f54e6f613d..e31747d328e70079309e1393f2ae31380e053991 100644 (file)
@@ -300,9 +300,7 @@ struct sk_buff *prp_create_tagged_frame(struct hsr_frame_info *frame,
        skb = skb_copy_expand(frame->skb_std, 0,
                              skb_tailroom(frame->skb_std) + HSR_HLEN,
                              GFP_ATOMIC);
-       prp_fill_rct(skb, frame, port);
-
-       return skb;
+       return prp_fill_rct(skb, frame, port);
 }
 
 static void hsr_deliver_master(struct sk_buff *skb, struct net_device *dev,