about summary refs log tree commit diff
path: root/arch
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2021-07-06 21:12:02 -0400
committerRich Felker <dalias@aerifal.cx>2021-07-06 21:12:02 -0400
commit0fbd7d6683d04dcaa636df53e7fce69ece746241 (patch)
tree0dc5d444a0c14b9a241c1d7785ef2cab06f6fd21 /arch
parent4f3d346bffdf9ed2b1803653643dc31242490944 (diff)
downloadmusl-0fbd7d6683d04dcaa636df53e7fce69ece746241.tar.gz
musl-0fbd7d6683d04dcaa636df53e7fce69ece746241.tar.xz
musl-0fbd7d6683d04dcaa636df53e7fce69ece746241.zip
fix broken struct shmid_ds on powerpc (32-bit)
the kernel structure has padding of the shm_segsz member up to 64
bits, as well as 2 unused longs at the end. somehow that was
overlooked when the powerpc port was added, and it has been broken
ever since; applications compiled with the wrong definition do not
correctly see the shm_segsz, shm_cpid, and shm_lpid members.

fixing the definition just by adding the missing padding would break
the ABI size of the structure as well as the position of the time64
shm_atime and shm_dtime members we added at the end. instead, just
move one of the unused padding members from the original end (before
time64) of the structure to the position of the missing padding. this
preserves size and preserves correct behavior of any compiled code
that was already working. programs affected by the wrong definition
need to be recompiled with the correct one.
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/bits/shm.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/bits/shm.h b/arch/powerpc/bits/shm.h
index fb1d4020..7f1ca17e 100644
--- a/arch/powerpc/bits/shm.h
+++ b/arch/powerpc/bits/shm.h
@@ -8,11 +8,11 @@ struct shmid_ds {
 	unsigned long __shm_dtime_lo;
 	unsigned long __shm_ctime_hi;
 	unsigned long __shm_ctime_lo;
+	unsigned long __pad1;
 	size_t shm_segsz;
 	pid_t shm_cpid;
 	pid_t shm_lpid;
 	unsigned long shm_nattch;
-	unsigned long __pad1;
 	unsigned long __pad2;
 	time_t shm_atime;
 	time_t shm_dtime;