From: Daniil Iskhakov <dish@amicon.ru>
To: Anatoly Burakov <anatoly.burakov@intel.com>
Cc: <dev@dpdk.org>, <stable@dpdk.org>, <dish@amicon.ru>,
<rrv@amicon.ru>, <dmitry.kozliuk@gmail.com>,
<sdl.dpdk@linuxtesting.org>
Subject: [PATCH v2] fbarray: check file lock downgrade failure
Date: Mon, 28 Sep 2026 18:00:25 +0300 [thread overview]
Message-ID: <20260928150025.593474-1-dish@amicon.ru> (raw)
If unlinking of the file fails, rte_fbarray_destroy() keeps the fbarray
mapped and attempts to downgrade the exclusive file lock back to a
shared lock. The result of this downgrade is currently ignored.
Check the return value and log a failure. Save errno immediately after
the failed unlink(), because subsequent calls may change it. Before
returning, set rte_errno to the saved value so the caller receives the
primary reason why the destroy operation failed.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: 5b61c62cfd76 ("fbarray: add internal tailq for mapped areas")
Cc: stable@dpdk.org
Signed-off-by: Daniil Iskhakov <dish@amicon.ru>
---
v2:
- preserve the unlink() error across the lock downgrade attempt
- check the lock operation result explicitly
- update the Fixes tag to the commit that introduced the unchecked
downgrade
---
Cc: dmitry.kozliuk@gmail.com
Cc: sdl.dpdk@linuxtesting.org
Cc: rrv@amicon.ru
---
lib/eal/common/eal_common_fbarray.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/lib/eal/common/eal_common_fbarray.c b/lib/eal/common/eal_common_fbarray.c
index 8bdcefb717..5b3532893c 100644
--- a/lib/eal/common/eal_common_fbarray.c
+++ b/lib/eal/common/eal_common_fbarray.c
@@ -1015,15 +1015,19 @@ rte_fbarray_destroy(struct rte_fbarray *arr)
/* we're OK to destroy the file */
eal_get_fbarray_path(path, sizeof(path), arr->name);
if (unlink(path)) {
+ const int unlink_errno = errno;
+
EAL_LOG(DEBUG, "Cannot unlink fbarray: %s",
- strerror(errno));
- rte_errno = errno;
+ strerror(unlink_errno));
/*
* we're still holding an exclusive lock, so drop it to
* shared.
*/
- eal_file_lock(fd, EAL_FLOCK_SHARED, EAL_FLOCK_RETURN);
+ if (eal_file_lock(fd, EAL_FLOCK_SHARED, EAL_FLOCK_RETURN) != 0)
+ EAL_LOG(DEBUG, "Cannot restore fbarray shared lock: %s",
+ rte_strerror(rte_errno));
+ rte_errno = unlink_errno;
ret = -1;
goto out;
}
--
2.53.0
reply other threads:[~2026-09-29 5:41 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260928150025.593474-1-dish@amicon.ru \
--to=dish@amicon.ru \
--cc=anatoly.burakov@intel.com \
--cc=dev@dpdk.org \
--cc=dmitry.kozliuk@gmail.com \
--cc=rrv@amicon.ru \
--cc=sdl.dpdk@linuxtesting.org \
--cc=stable@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox