From nobody Sun Mar 27 20:14:04 2022 X-Original-To: dev-commits-src-branches@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 45D331A53548; Sun, 27 Mar 2022 20:14:05 +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 4KRRqc71Vhz4p0b; Sun, 27 Mar 2022 20:14:04 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648412045; 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=Lbldk9C06dzM/Ap4gF/4/V8o4cG0G0GYue//PgfFlg8=; b=wRFsdVeiyUxyQJqkWBO3QpL5EgzpGhVnITM3/EP3/5QqQGWs+LOejBD/GF5UOaP5o9fVy4 YMnkxlxlpWHRDMjqlE7niMEBNDbSP2+GU9bNbN9tON/wO0TxsvKVTZjfOurLwlivHPOMlD Ws+jR0qFAnORMcw+DM0MDDP0z/EJ5Yi9Ak2q2ooMEPXOrEli1QobFmRZnawv98M8adS/g4 97ltBiJJF7fcOl4tdvn6lbcfZaXHjuBHNP3xeMDHEhSFPmlCq2JedwqMI5wP8TPsHgmmGD Y68bTmHoDZRRePgDC5ZX4NUROz0v0IyPilfyHbQ6hlBslYkqj2OL8eSAHy0BRQ== 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 AB5671C004; Sun, 27 Mar 2022 20:14:04 +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 22RKE49c037221; Sun, 27 Mar 2022 20:14:04 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 22RKE4kd037220; Sun, 27 Mar 2022 20:14:04 GMT (envelope-from git) Date: Sun, 27 Mar 2022 20:14:04 GMT Message-Id: <202203272014.22RKE4kd037220@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: 32d1d7fee613 - stable/13 - LinuxKPI: skbuff: fix skb_queue_splice_init() List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@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/stable/13 X-Git-Reftype: branch X-Git-Commit: 32d1d7fee61328e65ae944836d1027335ccb979c Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648412045; 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=Lbldk9C06dzM/Ap4gF/4/V8o4cG0G0GYue//PgfFlg8=; b=nnFQguShL3ufaGzDQVG2XLxzbWZ8YZQElFoBdm9UpeMnhnqbZnBAq/9ZdsR1JYM88/IuQt dBCL2oIznRjjoRaguKKByZhhy5hddEgLktbzHYG1nb/fdwNqjrYkJrz9+Jw4SuKwSm0DzW YyMocIXKuzpAYxi0ZFbfC1APAJ4knByDP4KeBdetgellPTlAbsZ9GH0z8myzVoVnkucxHM SNl0TR9PVZif2i20nrl4duLdEAXzJ/nAd4MEOeb+lhhPEoP80iTPLDalSYjKgHYh5ksGHv aQjD1BNYytIOKUaWmG72QOofM+PYXYXqKOIgoVrNH5k6POGAfQduppwxnosIPQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1648412045; a=rsa-sha256; cv=none; b=JQC+vAPWLrZH3kixrdCWqyt5GK/I8YZX/gY+7z30kcS0q+H/jfAjAPa4RN7Fp2NUhoqFD4 G7AKNeTNuSxXDqWJrFug34AMEYeeadF/iRPi/OijH0GXdV5Jxz+pM5BWsMpfuGvSQp1q4Y V3nOfE7ndir4nGTeyJ5qCOX5LqnH8ada7crWAscG7gBB5R5kDZ7mNp0k16Z3B4sDKfjO3X HfxgVpFEE3a7lmoU1qWyvrpUto7iZm03/xCqOmCnXWzZYFmTMVtVuvlla38N7Z6MfxADPy 1krGtIDYhOANAVA35UF4u4BYrYDZWr6RL4X876c/NGWiyvuYPanT2wei2GWKPA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=32d1d7fee61328e65ae944836d1027335ccb979c commit 32d1d7fee61328e65ae944836d1027335ccb979c Author: Bjoern A. Zeeb AuthorDate: 2022-03-23 17:05:43 +0000 Commit: Bjoern A. Zeeb CommitDate: 2022-03-27 18:08:53 +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 (cherry picked from commit 6a8973c3324c0c6c270ae4ad371e50c0ec5761da) --- 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);