2020-11-18 15:48:09

by Christian Eggers

[permalink] [raw]
Subject: [PATCH net-next] net: dsa: avoid potential use-after-free error

If dsa_switch_ops::port_txtstamp() returns false, clone will be freed
immediately. Storing the pointer in DSA_SKB_CB(skb)->clone anyway,
supports annoying use-after-free bugs.

Signed-off-by: Christian Eggers <[email protected]>
Fixes 146d442c2357 ("net: dsa: Keep a pointer to the skb clone for TX timestamping")
---
net/dsa/slave.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index ff2266d2b998..7efc753e4d9d 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -522,10 +522,10 @@ static void dsa_skb_tx_timestamp(struct dsa_slave_priv *p,
if (!clone)
return;

- DSA_SKB_CB(skb)->clone = clone;
-
- if (ds->ops->port_txtstamp(ds, p->dp->index, clone, type))
+ if (ds->ops->port_txtstamp(ds, p->dp->index, clone, type)) {
+ DSA_SKB_CB(skb)->clone = clone;
return;
+ }

kfree_skb(clone);
}
--
Christian Eggers
Embedded software developer

Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
Sitz: Muenchen - Registergericht: Amtsgericht Muenchen - Handelsregisternummer: HRA 57918
Persoenlich haftender Gesellschafter: Arnold & Richter Cine Technik GmbH
Sitz: Muenchen - Registergericht: Amtsgericht Muenchen - Handelsregisternummer: HRB 54477
Geschaeftsfuehrer: Dr. Michael Neuhaeuser; Stephan Schenk; Walter Trauninger; Markus Zeiler


2020-11-18 23:36:29

by Vladimir Oltean

[permalink] [raw]
Subject: Re: [PATCH net-next] net: dsa: avoid potential use-after-free error

On Wed, Nov 18, 2020 at 04:43:35PM +0100, Christian Eggers wrote:
> If dsa_switch_ops::port_txtstamp() returns false, clone will be freed
> immediately. Storing the pointer in DSA_SKB_CB(skb)->clone anyway,
> supports annoying use-after-free bugs.

Like what?

> Signed-off-by: Christian Eggers <[email protected]>
> Fixes 146d442c2357 ("net: dsa: Keep a pointer to the skb clone for TX timestamping")

Not the right format for a Fixes: tag, please try to set up your
.gitconfig to automate the creation of this tag.

2020-11-19 05:30:06

by Christian Eggers

[permalink] [raw]
Subject: Re: [PATCH net-next] net: dsa: avoid potential use-after-free error

On Thursday, 19 November 2020, 00:33:57 CET, Vladimir Oltean wrote:
> On Wed, Nov 18, 2020 at 04:43:35PM +0100, Christian Eggers wrote:
> > If dsa_switch_ops::port_txtstamp() returns false, clone will be freed
> > immediately. Storing the pointer in DSA_SKB_CB(skb)->clone anyway,
> > supports annoying use-after-free bugs.
>
> Like what?
In my own code. I test for DSA_SKB_CB(skb)->clone in order to determine
whether a skb has been selected for TX time stamping by
ksz9477_ptp_port_txtstamp().

>
> > Signed-off-by: Christian Eggers <[email protected]>
> > Fixes 146d442c2357 ("net: dsa: Keep a pointer to the skb clone for TX
> > timestamping")
> Not the right format for a Fixes: tag, please try to set up your
> .gitconfig to automate the creation of this tag.
I think you (or somebody else) already noted this. Sorry for postponing.

regards
Christian