lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sun, 9 Oct 2022 12:17:37 +1300 From: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@...il.com> To: Christine Caulfield <ccaulfie@...hat.com>, David Teigland <teigland@...hat.com>, cluster-devel@...hat.com Cc: linux-kernel@...r.kernel.org, linux-hardening@...r.kernel.org, paulo.miguel.almeida.rodenas@...il.com Subject: [PATCH v2][next] dlm: Replace one-element array with flexible-array member One-element arrays are deprecated, and we are replacing them with flexible array members instead. So, replace one-element array with flexible-array member in struct dlm_ls, and refactor the rest of the code, accordingly. We strive to make changes that don't produce any before/after binary output differeces as that makes it easier for the reviewer to accept the patch. In this particular instance, it wasn't possible to achieve this due to the fact that the ls_name[1] size, which is used as the NUL-terminator space, was hidden within the struct's padding as shown below. $ diff <(objdump -M intel -j .text -D dlm.old) <(objdump -M intel -j .text -D dlm.new) 13778c13778 < c693: 49 8d bc 24 c0 08 00 lea rdi,[r12+0x8c0] --- > c693: 49 8d bc 24 c1 08 00 lea rdi,[r12+0x8c1] $ pahole dlm.old -C dlm_ls ... int ls_namelen; /* 2232 4 */ char ls_name[1]; /* 2236 1 */ /* size: 2240, cachelines: 35, members: 90 */ /* sum members: 2166, holes: 17, sum holes: 71 */ /* padding: 3 */ /* paddings: 3, sum paddings: 17 */ /* forced alignments: 1 */ } __attribute__((__aligned__(8))); $ pahole dlm.new -C dlm_ls ... int ls_namelen; /* 2232 4 */ char ls_name[]; /* 2236 0 */ /* size: 2240, cachelines: 35, members: 90 */ /* sum members: 2165, holes: 17, sum holes: 71 */ /* padding: 4 */ /* paddings: 3, sum paddings: 17 */ /* forced alignments: 1 */ } __attribute__((__aligned__(8))); This helps with the ongoing efforts to tighten the FORTIFY_SOURCE routines on memcpy() and help us make progress towards globally enabling -fstrict-flex-arrays=3 [1]. Link: https://github.com/KSPP/linux/issues/79 Link: https://github.com/KSPP/linux/issues/228 Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101836 [1] Signed-off-by: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@...il.com> --- My apologies for v2, there was an accidental <Cr> I added on the CC line which messed up the body of my previus email. This patch sets it right. --- fs/dlm/dlm_internal.h | 2 +- fs/dlm/lockspace.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/dlm/dlm_internal.h b/fs/dlm/dlm_internal.h index e34c3d2639a5..ce2e32ed2ede 100644 --- a/fs/dlm/dlm_internal.h +++ b/fs/dlm/dlm_internal.h @@ -670,7 +670,7 @@ struct dlm_ls { void *ls_ops_arg; int ls_namelen; - char ls_name[1]; + char ls_name[]; }; /* diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c index bae050df7abf..c3a36f3197da 100644 --- a/fs/dlm/lockspace.c +++ b/fs/dlm/lockspace.c @@ -473,7 +473,7 @@ static int new_lockspace(const char *name, const char *cluster, error = -ENOMEM; - ls = kzalloc(sizeof(struct dlm_ls) + namelen, GFP_NOFS); + ls = kzalloc(sizeof(struct dlm_ls) + namelen + 1, GFP_NOFS); if (!ls) goto out; memcpy(ls->ls_name, name, namelen); -- 2.37.3
Powered by blists - more mailing lists