Message ID | 20201127093421.21673-1-lukas.bulwahn@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 9e39394faef6d436f0c9900d2a5c690c13bc1cac |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net/ipv6: propagate user pointer annotation | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Guessed tree name to be net-next |
netdev/subject_prefix | warning | Target tree name not specified in the subject |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 1 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 8 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 1 this patch: 0 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
Looks good,
Reviewed-by: Christoph Hellwig <hch@lst.de>
Hello: This patch was applied to netdev/net-next.git (refs/heads/master): On Fri, 27 Nov 2020 10:34:21 +0100 you wrote: > For IPV6_2292PKTOPTIONS, do_ipv6_getsockopt() stores the user pointer > optval in the msg_control field of the msghdr. > > Hence, sparse rightfully warns at ./net/ipv6/ipv6_sockglue.c:1151:33: > > warning: incorrect type in assignment (different address spaces) > expected void *msg_control > got char [noderef] __user *optval > > [...] Here is the summary with links: - net/ipv6: propagate user pointer annotation https://git.kernel.org/netdev/net-next/c/9e39394faef6 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 43a894bf9a1b..a6804a7e34c1 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -1148,7 +1148,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, if (sk->sk_type != SOCK_STREAM) return -ENOPROTOOPT; - msg.msg_control = optval; + msg.msg_control_user = optval; msg.msg_controllen = len; msg.msg_flags = flags; msg.msg_control_is_user = true;
For IPV6_2292PKTOPTIONS, do_ipv6_getsockopt() stores the user pointer optval in the msg_control field of the msghdr. Hence, sparse rightfully warns at ./net/ipv6/ipv6_sockglue.c:1151:33: warning: incorrect type in assignment (different address spaces) expected void *msg_control got char [noderef] __user *optval Since commit 1f466e1f15cf ("net: cleanly handle kernel vs user buffers for ->msg_control"), user pointers shall be stored in the msg_control_user field, and kernel pointers in the msg_control field. This allows to propagate __user annotations nicely through this struct. Store optval in msg_control_user to properly record and propagate the memory space annotation of this pointer. Note that msg_control_is_user is set to true, so the key invariant, i.e., use msg_control_user if and only if msg_control_is_user is true, holds. The msghdr is further used in the six alternative put_cmsg() calls, with msg_control_is_user being true, put_cmsg() picks msg_control_user preserving the __user annotation and passes that properly to copy_to_user(). No functional change. No change in object code. Signed-off-by: Lukas Bulwahn <lukas.bulwahn@gmail.com> --- Christoph, please review and ack. David, Alexey, Hideaki-san, Jakub, please pick this minor non-urgent clean-up patch. net/ipv6/ipv6_sockglue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)