!14 [sync] PR-12: fix segmentation fault with --offset and output wrong result with --verify

Merge pull request !14 from openeuler-sync-bot/sync-pr12-openEuler-22.03-LTS-Next-to-master
This commit is contained in:
openeuler-ci-bot 2022-02-08 07:11:40 +00:00 committed by Gitee
commit feef28a2aa
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 76 additions and 1 deletions

View File

@ -0,0 +1,44 @@
From 53797364e07e67555ec3b139cf3c3563c7035c11 Mon Sep 17 00:00:00 2001
From: Chunsheng Luo <luochunsheng@huawei.com>
Date: Wed, 8 Sep 2021 17:18:53 +0800
Subject: [PATCH] shm.c: Fix segmentation fault when using offset
The following command can trigger the bug
numactl --offset 4096 --length 65536 --file xxx -p0 --touch
When we create a shm file, we just consider shmlen, but not consider shmoffset,
resulting in the mapped memory is no within the scope of the new shm file.
---
shm.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/shm.c b/shm.c
index e5192e5..324cfbe 100644
--- a/shm.c
+++ b/shm.c
@@ -107,8 +107,8 @@ void attach_sysvshm(char *name, char *opt)
"need a --length to create a sysv shared memory segment");
fprintf(stderr,
"numactl: Creating shared memory segment %s id %ld mode %04o length %.fMB\n",
- name, shmid, shmmode, ((double)shmlen) / (1024*1024) );
- shmfd = shmget(key, shmlen, IPC_CREAT|shmmode|shmflags);
+ name, shmid, shmmode, ((double)(shmlen + shmoffset)) / (1024*1024) );
+ shmfd = shmget(key, shmlen + shmoffset, IPC_CREAT|shmmode|shmflags);
if (shmfd < 0)
nerror("cannot create shared memory segment");
}
@@ -145,8 +145,12 @@ void attach_shared(char *name, char *opt)
}
if (fstat64(shmfd, &st) < 0)
err("shm stat");
- if (shmlen > st.st_size) {
- if (ftruncate64(shmfd, shmlen) < 0) {
+ /* the file size must be larger than mmap shmlen + shmoffset, otherwise SIGBUS
+ * will be caused when we access memory, because mmaped memory is no longer in
+ * the range of the file laster.
+ */
+ if ((shmlen + shmoffset) > st.st_size) {
+ if (ftruncate64(shmfd, shmlen + shmoffset) < 0) {
/* XXX: we could do it by hand, but it would it
would be impossible to apply policy then.
need to fix that in the kernel. */

View File

@ -0,0 +1,25 @@
From c833565be79f2ef2541459f2d8444894abd9d939 Mon Sep 17 00:00:00 2001
From: Chunsheng Luo <luochunsheng@huawei.com>
Date: Wed, 8 Sep 2021 18:10:53 +0800
Subject: [PATCH] shm.c: fix verify_shm memcmp nodes
When nodemask_sz is large 64 (CONFIG_NODES_SHIFT > 6), verify_shm
will output wrong result "mismatched node mask". that's not what we
expected, we expected compare nodes->maskp.
---
shm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/shm.c b/shm.c
index 324cfbe..3cf3d2b 100644
--- a/shm.c
+++ b/shm.c
@@ -295,7 +295,7 @@ void verify_shm(int policy, struct bitmask *nodes)
policy_name(pol2), policy_name(policy));
return;
}
- if (memcmp(nodes2, nodes, numa_bitmask_nbytes(nodes))) {
+ if (memcmp(nodes2->maskp, nodes->maskp, numa_bitmask_nbytes(nodes))) {
vwarn(p, "mismatched node mask\n");
printmask("expected", nodes);
printmask("real", nodes2);

View File

@ -1,12 +1,15 @@
Name: numactl Name: numactl
Version: 2.0.14 Version: 2.0.14
Release: 1 Release: 2
Summary: Library for tuning for Non Uniform Memory Access machines Summary: Library for tuning for Non Uniform Memory Access machines
License: GPLv2 License: GPLv2
URL: https://github.com/numactl/numactl URL: https://github.com/numactl/numactl
Source0: https://github.com/numactl/numactl/releases/download/v%{version}/numactl-%{version}.tar.gz Source0: https://github.com/numactl/numactl/releases/download/v%{version}/numactl-%{version}.tar.gz
BuildRequires: libtool automake autoconf BuildRequires: libtool automake autoconf
Patch1: 0001-Fix-segmentation-fault-when-using-offset.patch
Patch2: 0002-fix-verify_shm-memcmp-nodes.patch
%description %description
Simple NUMA policy support. It consists of a numactl program to run other Simple NUMA policy support. It consists of a numactl program to run other
programs with a specific NUMA policy and a libnuma shared library to set programs with a specific NUMA policy and a libnuma shared library to set
@ -74,6 +77,9 @@ LD_LIBRARY_PATH=$(pwd)/.libs make check
%{_mandir}/man3/*.3* %{_mandir}/man3/*.3*
%changelog %changelog
* Tue Feb 8 2022 zhouwenpei<zhouwenpei1@h-partners.com> - 2.0.14-2
- fix segmentation fault with --offset and output wrong result with --verify
* Tue Nov 30 2021 zhouwenpei<zhouwenpei1@huawei.com> - 2.0.14-1 * Tue Nov 30 2021 zhouwenpei<zhouwenpei1@huawei.com> - 2.0.14-1
- upgrade version to 2.0.14 - upgrade version to 2.0.14