Commit 4d14429
af_unix: don't post cmsg for SO_INQ unless explicitly asked for
A previous commit added SO_INQ support for AF_UNIX (SOCK_STREAM), but it
posts a SCM_INQ cmsg even if just msg->msg_get_inq is set. This is
incorrect, as ->msg_get_inq is just the caller asking for the remainder
to be passed back in msg->msg_inq, it has nothing to do with cmsg. The
original commit states that this is done to make sockets
io_uring-friendly", but it's actually incorrect as io_uring doesn't use
cmsg headers internally at all, and it's actively wrong as this means
that cmsg's are always posted if someone does recvmsg via io_uring.
Fix that up by only posting a cmsg if u->recvmsg_inq is set.
Additionally, mirror how TCP handles inquiry handling in that it should
only be done for a successful return. This makes the logic for the two
identical.
Cc: stable@vger.kernel.org
Fixes: df30285 ("af_unix: Introduce SO_INQ.")
Reported-by: Julian Orth <ju.orth@gmail.com>
Link: axboe/liburing#1509
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/07adc0c2-2c3b-4d08-8af1-1c466a40b6a8@kernel.dk
Signed-off-by: Paolo Abeni <pabeni@redhat.com>1 parent 3387a7a commit 4d14429
1 file changed
Lines changed: 8 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2904 | 2904 | | |
2905 | 2905 | | |
2906 | 2906 | | |
| 2907 | + | |
2907 | 2908 | | |
2908 | 2909 | | |
2909 | 2910 | | |
| |||
2929 | 2930 | | |
2930 | 2931 | | |
2931 | 2932 | | |
| 2933 | + | |
| 2934 | + | |
| 2935 | + | |
2932 | 2936 | | |
2933 | 2937 | | |
2934 | 2938 | | |
| |||
3088 | 3092 | | |
3089 | 3093 | | |
3090 | 3094 | | |
3091 | | - | |
| 3095 | + | |
3092 | 3096 | | |
3093 | | - | |
3094 | | - | |
| 3097 | + | |
| 3098 | + | |
| 3099 | + | |
3095 | 3100 | | |
3096 | 3101 | | |
3097 | 3102 | | |
| |||
0 commit comments