On Thu, Aug 29, 2024 at 5:57 AM Jeongjun Park <aha310510@xxxxxxxxx> wrote: > > Since smc_inet6_prot does not initialize ipv6_pinfo_offset, inet6_create() > copies an incorrect address value, sk + 0 (offset), to inet_sk(sk)->pinet6. > > In addition, 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 problem, you need to initialize ipv6_pinfo_offset, add a > smc6_sock structure, and then add ipv6_pinfo as the second member of > the smc_sock structure. > > Reported-by: syzkaller <syzkaller@xxxxxxxxxxxxxxxx> > Fixes: d25a92ccae6b ("net/smc: Introduce IPPROTO_SMC") > Signed-off-by: Jeongjun Park <aha310510@xxxxxxxxx> Reviewed-by: Eric Dumazet <edumazet@xxxxxxxxxx>