Patch "selftests/net: Interpret UDP_GRO cmsg data as an int value" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    selftests/net: Interpret UDP_GRO cmsg data as an int value

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     selftests-net-interpret-udp_gro-cmsg-data-as-an-int-.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 7a077945e9a096c6c259c06289e1259a02cefce7
Author: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx>
Date:   Thu Feb 16 13:43:40 2023 +0100

    selftests/net: Interpret UDP_GRO cmsg data as an int value
    
    [ Upstream commit 436864095a95fcc611c20c44a111985fa9848730 ]
    
    Data passed to user-space with a (SOL_UDP, UDP_GRO) cmsg carries an
    int (see udp_cmsg_recv), not a u16 value, as strace confirms:
    
      recvmsg(8, {msg_name=...,
                  msg_iov=[{iov_base="\0\0..."..., iov_len=96000}],
                  msg_iovlen=1,
                  msg_control=[{cmsg_len=20,         <-- sizeof(cmsghdr) + 4
                                cmsg_level=SOL_UDP,
                                cmsg_type=0x68}],    <-- UDP_GRO
                                msg_controllen=24,
                                msg_flags=0}, 0) = 11200
    
    Interpreting the data as an u16 value won't work on big-endian platforms.
    Since it is too late to back out of this API decision [1], fix the test.
    
    [1]: https://lore.kernel.org/netdev/20230131174601.203127-1-jakub@xxxxxxxxxxxxxx/
    
    Fixes: 3327a9c46352 ("selftests: add functionals test for UDP GRO")
    Suggested-by: Eric Dumazet <edumazet@xxxxxxxxxx>
    Signed-off-by: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx>
    Reviewed-by: Eric Dumazet <edumazet@xxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/testing/selftests/net/udpgso_bench_rx.c b/tools/testing/selftests/net/udpgso_bench_rx.c
index 4058c7451e70d..f35a924d4a303 100644
--- a/tools/testing/selftests/net/udpgso_bench_rx.c
+++ b/tools/testing/selftests/net/udpgso_bench_rx.c
@@ -214,11 +214,10 @@ static void do_verify_udp(const char *data, int len)
 
 static int recv_msg(int fd, char *buf, int len, int *gso_size)
 {
-	char control[CMSG_SPACE(sizeof(uint16_t))] = {0};
+	char control[CMSG_SPACE(sizeof(int))] = {0};
 	struct msghdr msg = {0};
 	struct iovec iov = {0};
 	struct cmsghdr *cmsg;
-	uint16_t *gsosizeptr;
 	int ret;
 
 	iov.iov_base = buf;
@@ -237,8 +236,7 @@ static int recv_msg(int fd, char *buf, int len, int *gso_size)
 		     cmsg = CMSG_NXTHDR(&msg, cmsg)) {
 			if (cmsg->cmsg_level == SOL_UDP
 			    && cmsg->cmsg_type == UDP_GRO) {
-				gsosizeptr = (uint16_t *) CMSG_DATA(cmsg);
-				*gso_size = *gsosizeptr;
+				*gso_size = *(int *)CMSG_DATA(cmsg);
 				break;
 			}
 		}



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux