On Tue, Aug 20, 2024 at 2:15 PM Jeongjun Park <aha310510@xxxxxxxxx> wrote: > > Since inet_sk(sk)->pinet6 and smc_sk(sk)->clcsock practically > point to the same address, when smc_create_clcsk() stores the newly > created clcsock in smc_sk(sk)->clcsock, inet_sk(sk)->pinet6 is corrupted > into clcsock. This causes NULL pointer dereference and various other > memory corruptions. > > To solve this, we need to modify the smc_sock structure. > > Reported-by: syzkaller <syzkaller@xxxxxxxxxxxxxxxx> > Fixes: ac7138746e14 ("smc: establish new socket family") Are you sure this Fixes: tag is correct ? Hint : This commit is from 2017, but IPPROTO_SMC was added in 2024. > Signed-off-by: Jeongjun Park <aha310510@xxxxxxxxx> > --- > net/smc/smc.h | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/net/smc/smc.h b/net/smc/smc.h > index 34b781e463c4..f23f76e94a66 100644 > --- a/net/smc/smc.h > +++ b/net/smc/smc.h > @@ -283,7 +283,10 @@ struct smc_connection { > }; > > struct smc_sock { /* smc sock container */ > - struct sock sk; > + union { > + struct sock sk; /* for AF_SMC */ > + struct inet_sock inet; /* for IPPROTO_SMC */ > + }; > struct socket *clcsock; /* internal tcp socket */ > void (*clcsk_state_change)(struct sock *sk); > /* original stat_change fct. */ > --