From nobody Wed Mar 23 17:18:31 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 2B1761A37D39; Wed, 23 Mar 2022 17:18:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KNw6w0dMWz3JhB; Wed, 23 Mar 2022 17:18:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648055912; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=OFp2CjN55y0JhvWb2Ip8cKmKbva0e7CJF1Wsf2WaEPA=; b=fE9Y8Y7e4d6DTSWxdl5a/4JTWVSUQrcDdK30GAUpUs0D9VhQ4idth0x3unFO5PMGTTFaHs s9juCXBxfGV6khF5KyIKClj4/2SFqlx5v9nf1KLenGBpFouKiEypt2Xu1JE4Hi/5T9N+eA 7luNzMlKQCbdE77UCCGR6AxGttK45xls4UFF+vekKkEwpfP9aEdFA+ZaubsWnTVDGsuDqO uVRdKXbVKQ/9VpVS5wlnSmxOJHbZ/mv7vGKyWaH6rd+TQGDMXkwkUCkYiUZPuA6jPuA90D Pd159uE1WZ9kOKkMQ3LkDF3GKJ5Kv+i3ohtKxAwmqw8HeRLLK8xNK664ZnN6pg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EA841274EF; Wed, 23 Mar 2022 17:18:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 22NHIVHO005338; Wed, 23 Mar 2022 17:18:31 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 22NHIVvt005337; Wed, 23 Mar 2022 17:18:31 GMT (envelope-from git) Date: Wed, 23 Mar 2022 17:18:31 GMT Message-Id: <202203231718.22NHIVvt005337@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: 6a8973c3324c - main - LinuxKPI: skbuff: fix skb_queue_splice_init() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6a8973c3324c0c6c270ae4ad371e50c0ec5761da Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648055912; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=OFp2CjN55y0JhvWb2Ip8cKmKbva0e7CJF1Wsf2WaEPA=; b=IO6Np90HJizo8puSNEfdOq5hbd7HYCbCQS3vFQMUMWTno83CgTdm39ytrlV7q5xAGASGkT wAYn8N80h5JG2Ju6foYizN/eCOXixa+sA7F7lt4T8UC23xnMKlemwZf+LpCaik+4GFWuUQ IM2UMJiGL+drDUYWhELEX3sB+0slZUbOFWO0Hc8G5A0G/0bJPGBzodfGyyP3BYh9Hte81b KPgWl/5xWOGowzXtnN7ZnfNjALzk+xb1FEOJZxpapS4xAkPBzL9M+bfwzJq9tpqL24yglb wTu/cRkkUm37CGpO9Nprmn9E6OX59NYqrvGYs+sc/1QjqWAFeACYAVT7p0qwZw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1648055912; a=rsa-sha256; cv=none; b=K4wo7fGuiTzJwqAgfCgEU8x0Von1tZ3UksmSpP09Qx5eLV1E/yOwqtWRJlv621wZIUrjwS 6O45yzoBiGCMb6BeF805P+/a5AlXiCYXjVA7+e7dWDyYgXH4DZhBnAdqkcQ9POwtd5kknA wtKx5HO/Zzy5rNIpdcRbg17N8yQ3kuvhl+0CE8So0Siuuz3xS+E9fzQZ59kERvEBHHpWg2 qJV0ybikC5hUBFYlBmlotIm9u+BwCn/ZFBWYif+R3upOTdqeHnSVQhJyOn5zmtj3ckiVrd 8d8nZyRht/YLPgwYfXdek+FxviFIBWGzGnCCKcS8QFTUlSpd50VGCx+rdfRujQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=6a8973c3324c0c6c270ae4ad371e50c0ec5761da commit 6a8973c3324c0c6c270ae4ad371e50c0ec5761da Author: Bjoern A. Zeeb AuthorDate: 2022-03-23 17:05:43 +0000 Commit: Bjoern A. Zeeb CommitDate: 2022-03-23 17:18:00 +0000 LinuxKPI: skbuff: fix skb_queue_splice_init() In skb_queue_splice_init() we set a next value and then used that new value to further update the remaining linking rather than the original value. Introduce another temporary variable 'n' to hold the original value and use that. While here rename q and h to from and to as otherwise it was too confusing to read. Also initialize skb->prev and skb->next to point to skb itself if for nothing else at least to aid debugging. Reported by: phk (panic in iwl_txq_reclaim) Sponsored by: The FreeBSD Foundation MFC after: 3 days --- sys/compat/linuxkpi/common/include/linux/skbuff.h | 25 ++++++++++++----------- sys/compat/linuxkpi/common/src/linux_skbuff.c | 2 ++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/skbuff.h b/sys/compat/linuxkpi/common/include/linux/skbuff.h index be93032c7561..21ea7ee560e2 100644 --- a/sys/compat/linuxkpi/common/include/linux/skbuff.h +++ b/sys/compat/linuxkpi/common/include/linux/skbuff.h @@ -762,26 +762,27 @@ skb_mark_not_on_list(struct sk_buff *skb) } static inline void -skb_queue_splice_init(struct sk_buff_head *q, struct sk_buff_head *h) +skb_queue_splice_init(struct sk_buff_head *from, struct sk_buff_head *to) { - struct sk_buff *b, *e; + struct sk_buff *b, *e, *n; - SKB_TRACE2(q, h); + SKB_TRACE2(from, to); - if (skb_queue_empty(q)) + if (skb_queue_empty(from)) return; /* XXX do we need a barrier around this? */ - b = q->next; - e = q->prev; + b = from->next; + e = from->prev; + n = to->next; - b->prev = (struct sk_buff *)h; - h->next = b; - e->next = h->next; - h->next->prev = e; + b->prev = (struct sk_buff *)to; + to->next = b; + e->next = n; + n->prev = e; - h->qlen += q->qlen; - __skb_queue_head_init(q); + to->qlen += from->qlen; + __skb_queue_head_init(from); } static inline void diff --git a/sys/compat/linuxkpi/common/src/linux_skbuff.c b/sys/compat/linuxkpi/common/src/linux_skbuff.c index 0a4974d74d9d..efb97fa2f126 100644 --- a/sys/compat/linuxkpi/common/src/linux_skbuff.c +++ b/sys/compat/linuxkpi/common/src/linux_skbuff.c @@ -86,6 +86,8 @@ linuxkpi_alloc_skb(size_t size, gfp_t gfp) skb->head = skb->data = skb->tail = (uint8_t *)(skb+1); skb->end = skb->head + size; + skb->prev = skb->next = skb; + skb->shinfo = (struct skb_shared_info *)(skb->end); SKB_TRACE_FMT(skb, "data %p size %zu", skb->data, size);