mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 13:19:56 -04:00
Merge tag 'net-6.18-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni:
"Including fixes from CAN
Current release - regressions:
- udp: do not use skb_release_head_state() before
skb_attempt_defer_free()
- gro_cells: use nested-BH locking for gro_cell
- dpll: zl3073x: increase maximum size of flash utility
Previous releases - regressions:
- core: fix lockdep splat on device unregister
- tcp: fix tcp_tso_should_defer() vs large RTT
- tls:
- don't rely on tx_work during send()
- wait for pending async decryptions if tls_strp_msg_hold fails
- can: j1939: add missing calls in NETDEV_UNREGISTER notification
handler
- eth: lan78xx: fix lost EEPROM write timeout in
lan78xx_write_raw_eeprom
Previous releases - always broken:
- ip6_tunnel: prevent perpetual tunnel growth
- dpll: zl3073x: handle missing or corrupted flash configuration
- can: m_can: fix pm_runtime and CAN state handling
- eth:
- ixgbe: fix too early devlink_free() in ixgbe_remove()
- ixgbevf: fix mailbox API compatibility
- gve: Check valid ts bit on RX descriptor before hw timestamping
- idpf: cleanup remaining SKBs in PTP flows
- r8169: fix packet truncation after S4 resume on RTL8168H/RTL8111H"
* tag 'net-6.18-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (50 commits)
udp: do not use skb_release_head_state() before skb_attempt_defer_free()
net: usb: lan78xx: fix use of improperly initialized dev->chipid in lan78xx_reset
netdevsim: set the carrier when the device goes up
selftests: tls: add test for short splice due to full skmsg
selftests: net: tls: add tests for cmsg vs MSG_MORE
tls: don't rely on tx_work during send()
tls: wait for pending async decryptions if tls_strp_msg_hold fails
tls: always set record_type in tls_process_cmsg
tls: wait for async encrypt in case of error during latter iterations of sendmsg
tls: trim encrypted message to match the plaintext on short splice
tg3: prevent use of uninitialized remote_adv and local_adv variables
MAINTAINERS: new entry for IPv6 IOAM
gve: Check valid ts bit on RX descriptor before hw timestamping
net: core: fix lockdep splat on device unregister
MAINTAINERS: add myself as maintainer for b53
selftests: net: check jq command is supported
net: airoha: Take into account out-of-order tx completions in airoha_dev_xmit()
tcp: fix tcp_tso_should_defer() vs large RTT
r8152: add error handling in rtl8152_driver_init
usbnet: Fix using smp_processor_id() in preemptible code warnings
...
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
"""
|
||||
Driver test environment (hardware-only tests).
|
||||
NetDrvEnv and NetDrvEpEnv are the main environment classes.
|
||||
Former is for local host only tests, latter creates / connects
|
||||
to a remote endpoint. See NIPA wiki for more information about
|
||||
running and writing driver tests.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
@@ -8,26 +16,36 @@ KSFT_DIR = (Path(__file__).parent / "../../../../..").resolve()
|
||||
try:
|
||||
sys.path.append(KSFT_DIR.as_posix())
|
||||
|
||||
from net.lib.py import *
|
||||
from drivers.net.lib.py import *
|
||||
|
||||
# Import one by one to avoid pylint false positives
|
||||
from net.lib.py import NetNS, NetNSEnter, NetdevSimDev
|
||||
from net.lib.py import EthtoolFamily, NetdevFamily, NetshaperFamily, \
|
||||
NlError, RtnlFamily, DevlinkFamily, PSPFamily
|
||||
from net.lib.py import CmdExitFailure
|
||||
from net.lib.py import bkg, cmd, defer, ethtool, fd_read_timeout, ip, \
|
||||
rand_port, tool, wait_port_listen
|
||||
from net.lib.py import fd_read_timeout
|
||||
from net.lib.py import bkg, cmd, bpftool, bpftrace, defer, ethtool, \
|
||||
fd_read_timeout, ip, rand_port, wait_port_listen, wait_file
|
||||
from net.lib.py import KsftSkipEx, KsftFailEx, KsftXfailEx
|
||||
from net.lib.py import ksft_disruptive, ksft_exit, ksft_pr, ksft_run, \
|
||||
ksft_setup
|
||||
from net.lib.py import ksft_eq, ksft_ge, ksft_in, ksft_is, ksft_lt, \
|
||||
ksft_ne, ksft_not_in, ksft_raises, ksft_true, ksft_gt, ksft_not_none
|
||||
from net.lib.py import NetNSEnter
|
||||
from drivers.net.lib.py import GenerateTraffic
|
||||
from drivers.net.lib.py import GenerateTraffic, Remote
|
||||
from drivers.net.lib.py import NetDrvEnv, NetDrvEpEnv
|
||||
|
||||
__all__ = ["NetNS", "NetNSEnter", "NetdevSimDev",
|
||||
"EthtoolFamily", "NetdevFamily", "NetshaperFamily",
|
||||
"NlError", "RtnlFamily", "DevlinkFamily", "PSPFamily",
|
||||
"CmdExitFailure",
|
||||
"bkg", "cmd", "bpftool", "bpftrace", "defer", "ethtool",
|
||||
"fd_read_timeout", "ip", "rand_port",
|
||||
"wait_port_listen", "wait_file",
|
||||
"KsftSkipEx", "KsftFailEx", "KsftXfailEx",
|
||||
"ksft_disruptive", "ksft_exit", "ksft_pr", "ksft_run",
|
||||
"ksft_setup",
|
||||
"ksft_eq", "ksft_ge", "ksft_in", "ksft_is", "ksft_lt",
|
||||
"ksft_ne", "ksft_not_in", "ksft_raises", "ksft_true", "ksft_gt",
|
||||
"ksft_not_none", "ksft_not_none",
|
||||
"NetDrvEnv", "NetDrvEpEnv", "GenerateTraffic", "Remote"]
|
||||
except ModuleNotFoundError as e:
|
||||
ksft_pr("Failed importing `net` library from kernel sources")
|
||||
ksft_pr(str(e))
|
||||
ktap_result(True, comment="SKIP")
|
||||
print("Failed importing `net` library from kernel sources")
|
||||
print(str(e))
|
||||
sys.exit(4)
|
||||
|
||||
@@ -22,7 +22,7 @@ try:
|
||||
NlError, RtnlFamily, DevlinkFamily, PSPFamily
|
||||
from net.lib.py import CmdExitFailure
|
||||
from net.lib.py import bkg, cmd, bpftool, bpftrace, defer, ethtool, \
|
||||
fd_read_timeout, ip, rand_port, tool, wait_port_listen, wait_file
|
||||
fd_read_timeout, ip, rand_port, wait_port_listen, wait_file
|
||||
from net.lib.py import KsftSkipEx, KsftFailEx, KsftXfailEx
|
||||
from net.lib.py import ksft_disruptive, ksft_exit, ksft_pr, ksft_run, \
|
||||
ksft_setup
|
||||
@@ -34,7 +34,7 @@ try:
|
||||
"NlError", "RtnlFamily", "DevlinkFamily", "PSPFamily",
|
||||
"CmdExitFailure",
|
||||
"bkg", "cmd", "bpftool", "bpftrace", "defer", "ethtool",
|
||||
"fd_read_timeout", "ip", "rand_port", "tool",
|
||||
"fd_read_timeout", "ip", "rand_port",
|
||||
"wait_port_listen", "wait_file",
|
||||
"KsftSkipEx", "KsftFailEx", "KsftXfailEx",
|
||||
"ksft_disruptive", "ksft_exit", "ksft_pr", "ksft_run",
|
||||
|
||||
@@ -1,9 +1,32 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
"""
|
||||
Python selftest helpers for netdev.
|
||||
"""
|
||||
|
||||
from .consts import KSRC
|
||||
from .ksft import *
|
||||
from .ksft import KsftFailEx, KsftSkipEx, KsftXfailEx, ksft_pr, ksft_eq, \
|
||||
ksft_ne, ksft_true, ksft_not_none, ksft_in, ksft_not_in, ksft_is, \
|
||||
ksft_ge, ksft_gt, ksft_lt, ksft_raises, ksft_busy_wait, \
|
||||
ktap_result, ksft_disruptive, ksft_setup, ksft_run, ksft_exit
|
||||
from .netns import NetNS, NetNSEnter
|
||||
from .nsim import *
|
||||
from .utils import *
|
||||
from .nsim import NetdevSim, NetdevSimDev
|
||||
from .utils import CmdExitFailure, fd_read_timeout, cmd, bkg, defer, \
|
||||
bpftool, ip, ethtool, bpftrace, rand_port, wait_port_listen, wait_file
|
||||
from .ynl import NlError, YnlFamily, EthtoolFamily, NetdevFamily, RtnlFamily, RtnlAddrFamily
|
||||
from .ynl import NetshaperFamily, DevlinkFamily, PSPFamily
|
||||
|
||||
__all__ = ["KSRC",
|
||||
"KsftFailEx", "KsftSkipEx", "KsftXfailEx", "ksft_pr", "ksft_eq",
|
||||
"ksft_ne", "ksft_true", "ksft_not_none", "ksft_in", "ksft_not_in",
|
||||
"ksft_is", "ksft_ge", "ksft_gt", "ksft_lt", "ksft_raises",
|
||||
"ksft_busy_wait", "ktap_result", "ksft_disruptive", "ksft_setup",
|
||||
"ksft_run", "ksft_exit",
|
||||
"NetNS", "NetNSEnter",
|
||||
"CmdExitFailure", "fd_read_timeout", "cmd", "bkg", "defer",
|
||||
"bpftool", "ip", "ethtool", "bpftrace", "rand_port",
|
||||
"wait_port_listen", "wait_file",
|
||||
"NetdevSim", "NetdevSimDev",
|
||||
"NetshaperFamily", "DevlinkFamily", "PSPFamily", "NlError",
|
||||
"YnlFamily", "EthtoolFamily", "NetdevFamily", "RtnlFamily",
|
||||
"RtnlAddrFamily"]
|
||||
|
||||
@@ -1466,6 +1466,8 @@ usage: ${0##*/} OPTS
|
||||
EOF
|
||||
}
|
||||
|
||||
require_command jq
|
||||
|
||||
#check for needed privileges
|
||||
if [ "$(id -u)" -ne 0 ];then
|
||||
end_test "SKIP: Need root privileges"
|
||||
|
||||
@@ -564,6 +564,40 @@ TEST_F(tls, msg_more)
|
||||
EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
|
||||
}
|
||||
|
||||
TEST_F(tls, cmsg_msg_more)
|
||||
{
|
||||
char *test_str = "test_read";
|
||||
char record_type = 100;
|
||||
int send_len = 10;
|
||||
|
||||
/* we don't allow MSG_MORE with non-DATA records */
|
||||
EXPECT_EQ(tls_send_cmsg(self->fd, record_type, test_str, send_len,
|
||||
MSG_MORE), -1);
|
||||
EXPECT_EQ(errno, EINVAL);
|
||||
}
|
||||
|
||||
TEST_F(tls, msg_more_then_cmsg)
|
||||
{
|
||||
char *test_str = "test_read";
|
||||
char record_type = 100;
|
||||
int send_len = 10;
|
||||
char buf[10 * 2];
|
||||
int ret;
|
||||
|
||||
EXPECT_EQ(send(self->fd, test_str, send_len, MSG_MORE), send_len);
|
||||
EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_DONTWAIT), -1);
|
||||
|
||||
ret = tls_send_cmsg(self->fd, record_type, test_str, send_len, 0);
|
||||
EXPECT_EQ(ret, send_len);
|
||||
|
||||
/* initial DATA record didn't get merged with the non-DATA record */
|
||||
EXPECT_EQ(recv(self->cfd, buf, send_len * 2, 0), send_len);
|
||||
|
||||
EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, record_type,
|
||||
buf, sizeof(buf), MSG_WAITALL),
|
||||
send_len);
|
||||
}
|
||||
|
||||
TEST_F(tls, msg_more_unsent)
|
||||
{
|
||||
char const *test_str = "test_read";
|
||||
@@ -912,6 +946,37 @@ TEST_F(tls, peek_and_splice)
|
||||
EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
|
||||
}
|
||||
|
||||
#define MAX_FRAGS 48
|
||||
TEST_F(tls, splice_short)
|
||||
{
|
||||
struct iovec sendchar_iov;
|
||||
char read_buf[0x10000];
|
||||
char sendbuf[0x100];
|
||||
char sendchar = 'S';
|
||||
int pipefds[2];
|
||||
int i;
|
||||
|
||||
sendchar_iov.iov_base = &sendchar;
|
||||
sendchar_iov.iov_len = 1;
|
||||
|
||||
memset(sendbuf, 's', sizeof(sendbuf));
|
||||
|
||||
ASSERT_GE(pipe2(pipefds, O_NONBLOCK), 0);
|
||||
ASSERT_GE(fcntl(pipefds[0], F_SETPIPE_SZ, (MAX_FRAGS + 1) * 0x1000), 0);
|
||||
|
||||
for (i = 0; i < MAX_FRAGS; i++)
|
||||
ASSERT_GE(vmsplice(pipefds[1], &sendchar_iov, 1, 0), 0);
|
||||
|
||||
ASSERT_EQ(write(pipefds[1], sendbuf, sizeof(sendbuf)), sizeof(sendbuf));
|
||||
|
||||
EXPECT_EQ(splice(pipefds[0], NULL, self->fd, NULL, MAX_FRAGS + 0x1000, 0),
|
||||
MAX_FRAGS + sizeof(sendbuf));
|
||||
EXPECT_EQ(recv(self->cfd, read_buf, sizeof(read_buf), 0), MAX_FRAGS + sizeof(sendbuf));
|
||||
EXPECT_EQ(recv(self->cfd, read_buf, sizeof(read_buf), MSG_DONTWAIT), -1);
|
||||
EXPECT_EQ(errno, EAGAIN);
|
||||
}
|
||||
#undef MAX_FRAGS
|
||||
|
||||
TEST_F(tls, recvmsg_single)
|
||||
{
|
||||
char const *test_str = "test_recvmsg_single";
|
||||
|
||||
@@ -249,6 +249,8 @@ test_binding_toggle_off_when_upper_down()
|
||||
do_test_binding_off : "on->off when upper down"
|
||||
}
|
||||
|
||||
require_command jq
|
||||
|
||||
trap defer_scopes_cleanup EXIT
|
||||
setup_prepare
|
||||
tests_run
|
||||
|
||||
Reference in New Issue
Block a user