2024년 8월 14일 (수) 오후 3:00, D. Wythe <alibuda@xxxxxxxxxxxxxxxxx>님이 작성: > > > > On 8/14/24 11:58 AM, Jeongjun Park wrote: > > Because clcsk_*, like clcsock, is initialized during the smc init process, > > the code was moved to prevent clcsk_* from having an address like > > inet_sk(sk)->pinet6, thereby preventing the previously initialized values > > from being tampered with. > > I don't agree with your approach, but I finally got the problem you > described. In fact, the issue here is that smc_sock should also be an > inet_sock, whereas currently it's just a sock. Therefore, the best > solution would be to embed an inet_sock within smc_sock rather than > performing this movement as you suggested. > > struct smc_sock { /* smc sock container */ > union { > struct sock sk; > struct inet_sock inet; > }; > > ... > > Thanks. > D. Wythe > I tested it myself and it doesn't trigger the existing issue, so I'll write a v4 patch with this code and send it to you. Regards, Jeongjun Park > > > > > Additionally, if you don't need alignment in smc_inet6_prot , I'll modify > > the patch to only add the necessary code without alignment. > > > > Regards, > > Jeongjun Park > > > >> > >>> Also, regarding alignment, it's okay for me whether it's aligned or > >>> not,But I checked the styles of other types of > >>> structures and did not strictly require alignment, so I now feel that > >>> there is no need to > >>> modify so much to do alignment. > >>> > >>> D. Wythe > >> > >> > >>>>>> + > >>>>>> static struct proto smc_inet6_prot = { > >>>>>> - .name = "INET6_SMC", > >>>>>> - .owner = THIS_MODULE, > >>>>>> - .init = smc_inet_init_sock, > >>>>>> - .hash = smc_hash_sk, > >>>>>> - .unhash = smc_unhash_sk, > >>>>>> - .release_cb = smc_release_cb, > >>>>>> - .obj_size = sizeof(struct smc_sock), > >>>>>> - .h.smc_hash = &smc_v6_hashinfo, > >>>>>> - .slab_flags = SLAB_TYPESAFE_BY_RCU, > >>>>>> + .name = "INET6_SMC", > >>>>>> + .owner = THIS_MODULE, > >>>>>> + .init = smc_inet_init_sock, > >>>>>> + .hash = smc_hash_sk, > >>>>>> + .unhash = smc_unhash_sk, > >>>>>> + .release_cb = smc_release_cb, > >>>>>> + .obj_size = sizeof(struct smc6_sock), > >>>>>> + .h.smc_hash = &smc_v6_hashinfo, > >>>>>> + .slab_flags = SLAB_TYPESAFE_BY_RCU, > >>>>>> + .ipv6_pinfo_offset = offsetof(struct smc6_sock, > >>>>>> np), > >>>>>> }; > >>>>>> > >>>>>> static const struct proto_ops smc_inet6_stream_ops = { > >>>>>> -- >