Linux 6.12.71
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.71 kernel.
All users of the 6.12 kernel series that had issues with 6.12.69 or 6.12.70 should upgrade, as some regressions are fixed here.
The updated 6.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.12.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 drivers/net/bareudp.c | 4 drivers/net/geneve.c | 4 drivers/net/vxlan/vxlan_core.c | 2 include/net/ip_tunnels.h | 13 +- io_uring/rw.c | 2 tools/testing/vsock/control.c | 9 - tools/testing/vsock/msg_zerocopy_common.c | 10 -- tools/testing/vsock/msg_zerocopy_common.h | 1 tools/testing/vsock/util.c | 142 ++++++++++++++++++++++++++++++ tools/testing/vsock/util.h | 7 + tools/testing/vsock/vsock_perf.c | 10 ++ tools/testing/vsock/vsock_test.c | 51 +++------- tools/testing/vsock/vsock_test_zerocopy.c | 2 tools/testing/vsock/vsock_uring_test.c | 2 15 files changed, 197 insertions(+), 64 deletions(-)
Greg Kroah-Hartman (1):
Linux 6.12.71
Jens Axboe (1):
io_uring/rw: recycle buffers manually for non-mshot reads
Konstantin Shkolnyy (1):
vsock/test: verify socket options after setting them
Menglong Dong (1):
net: tunnel: make skb_vlan_inet_prepare() return drop reasons
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 70 +SUBLEVEL = 71 EXTRAVERSION = NAME = Baby Opossum Posse
drivers/net/bareudp.c +2 -2
@@ -317,7 +317,7 @@ static int bareudp_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be32 saddr;int err; -if (!skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB ))) +if (skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB )))return -EINVAL ;if (!sock)
@@ -387,7 +387,7 @@ static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB ))) +if (skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB )))return -EINVAL ;if (!sock)
drivers/net/geneve.c +2 -2
@@ -827,7 +827,7 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, inner_proto_inherit)) +if (skb_vlan_inet_prepare (skb, inner_proto_inherit))return -EINVAL ;if (!gs4)
@@ -937,7 +937,7 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, inner_proto_inherit)) +if (skb_vlan_inet_prepare (skb, inner_proto_inherit))return -EINVAL ;if (!gs6)
drivers/net/vxlan/vxlan_core.c +1 -1
@@ -2381,7 +2381,7 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,__be32 vni =0 ; no_eth_encap = flags &VXLAN_F_GPE && skb->protocol !=htons (ETH_P_TEB ); -if (!skb_vlan_inet_prepare (skb, no_eth_encap)) +if (skb_vlan_inet_prepare (skb, no_eth_encap)) goto drop; old_iph =ip_hdr (skb);
include/net/ip_tunnels.h +8 -5
@@ -467,11 +467,12 @@ static inline bool pskb_inet_may_pull(struct sk_buff *skb)/* Variant of pskb_inet_may_pull(). */ -static inline bool skb_vlan_inet_prepare (struct sk_buff *skb, -bool inner_proto_inherit) +static inline enum skb_drop_reason +skb_vlan_inet_prepare (struct sk_buff *skb,bool inner_proto_inherit) {int nhlen =0 , maclen = inner_proto_inherit ?0 :ETH_HLEN ;__be16 type = skb->protocol; +enum skb_drop_reason reason;/* Essentially this is skb_protocol(skb, true) * And we get MAC len.
@@ -492,11 +493,13 @@ static inline bool skb_vlan_inet_prepare(struct sk_buff *skb,/* For ETH_P_IPV6/ETH_P_IP we make sure to pull * a base network header in skb->head. */ -if (!pskb_may_pull (skb, maclen + nhlen)) -return false; + reason =pskb_may_pull_reason (skb, maclen + nhlen); +if (reason) +return reason;skb_set_network_header (skb, maclen); -return true; + +return SKB_NOT_DROPPED_YET ; }static inline int ip_encap_hlen (struct ip_tunnel_encap *e)
io_uring/rw.c +2 -0
@@ -953,6 +953,8 @@ int io_read(struct io_kiocb *req, unsigned int issue_flags)if (ret >=0 )return kiocb_done (req, ret, issue_flags); +if (req->flags &REQ_F_BUFFERS_COMMIT ) +io_kbuf_recycle (req, issue_flags);return ret; }
tools/testing/vsock/control.c +3 -6
@@ -27,6 +27,7 @@#include "timeout.h" #include "control.h" +#include "util.h" static int control_fd =-1 ;
@@ -50,7 +51,6 @@ void control_init(const char *control_host,for (ai = result; ai; ai = ai->ai_next) {int fd; -int val =1 ; fd =socket (ai->ai_family, ai->ai_socktype, ai->ai_protocol);if (fd <0 )
@@ -65,11 +65,8 @@ void control_init(const char *control_host,break ; } -if (setsockopt (fd,SOL_SOCKET ,SO_REUSEADDR , - &val,sizeof (val)) <0 ) { -perror ("setsockopt" ); -exit (EXIT_FAILURE ); - } +setsockopt_int_check (fd,SOL_SOCKET ,SO_REUSEADDR ,1 , +"setsockopt SO_REUSEADDR" );if (bind (fd, ai->ai_addr, ai->ai_addrlen) <0 ) goto next;
tools/testing/vsock/msg_zerocopy_common.c +0 -10
@@ -14,16 +14,6 @@#include "msg_zerocopy_common.h" -void enable_so_zerocopy (int fd) -{ -int val =1 ; - -if (setsockopt (fd,SOL_SOCKET ,SO_ZEROCOPY , &val,sizeof (val))) { -perror ("setsockopt" ); -exit (EXIT_FAILURE ); - } -} -void vsock_recv_completion (int fd,const bool *zerocopied) {struct sock_extended_err *serr;
tools/testing/vsock/msg_zerocopy_common.h +0 -1
@@ -12,7 +12,6 @@#define VSOCK_RECVERR 1#endif -void enable_so_zerocopy (int fd);void vsock_recv_completion (int fd,const bool *zerocopied);#endif /* MSG_ZEROCOPY_COMMON_H */
tools/testing/vsock/util.c +142 -0
145 lines not on this page · raw message
tools/testing/vsock/util.h +7 -0
@@ -68,4 +68,11 @@ unsigned long iovec_hash_djb2(const struct iovec *iov, size_t iovnum);struct iovec *alloc_test_iovec (const struct iovec *test_iovec,int iovnum);void free_test_iovec (const struct iovec *test_iovec,struct iovec *iovec,int iovnum); +void setsockopt_ull_check (int fd,int level,int optname, +unsigned long long val,char const *errmsg); +void setsockopt_int_check (int fd,int level,int optname,int val, +char const *errmsg); +void setsockopt_timeval_check (int fd,int level,int optname, +struct timeval val,char const *errmsg); +void enable_so_zerocopy_check (int fd);#endif /* UTIL_H */
tools/testing/vsock/vsock_perf.c +10 -0
@@ -251,6 +251,16 @@ static void run_receiver(int rcvlowat_bytes)close (fd); } +static void enable_so_zerocopy (int fd) +{ +int val =1 ; + +if (setsockopt (fd,SOL_SOCKET ,SO_ZEROCOPY , &val,sizeof (val))) { +perror ("setsockopt" ); +exit (EXIT_FAILURE ); + } +} +static void run_sender (int peer_cid,unsigned long to_send_bytes) {time_t tx_begin_ns;
tools/testing/vsock/vsock_test.c +17 -34
88 lines not on this page · raw message
tools/testing/vsock/vsock_test_zerocopy.c +1 -1
@@ -162,7 +162,7 @@ static void test_client(const struct test_opts *opts, }if (test_data->so_zerocopy) -enable_so_zerocopy (fd); +enable_so_zerocopy_check (fd); iovec =alloc_test_iovec (test_data->vecs, test_data->vecs_cnt);
tools/testing/vsock/vsock_uring_test.c +1 -1
@@ -73,7 +73,7 @@ static void vsock_io_uring_client(const struct test_opts *opts, }if (msg_zerocopy) -enable_so_zerocopy (fd); +enable_so_zerocopy_check (fd); iovec =alloc_test_iovec (test_data->vecs, test_data->vecs_cnt);