[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup
From: |
Ari Sundholm |
Subject: |
[Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup |
Date: |
Fri, 05 Jul 2019 15:37:30 -0000 |
For comparison, the strace output when running natively:
shmget(IPC_PRIVATE, 688128, IPC_CREAT|IPC_EXCL|0666) = 72843341
shmctl(72843341, IPC_64|IPC_STAT, {shm_perm={uid=1000, gid=1000, mode=0666,
key=0, cuid=1000, cgid=1000}, shm_segsz=688128, shm_cpid=10883, shm_lpid=0,
shm_nattch=0, shm_atime=0, shm_dtime=0, shm_ctime=1562340846}) = 0
shmat(72843341, 0xf38ea000, 0) = 0xf38ea000
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 12), ...}) = 0
brk(NULL) = 0x58069000
brk(0x5808a000) = 0x5808a000
brk(0x5808b000) = 0x5808b000
write(1, "got err 0, ptr 0xf38ea000\n", 26got err 0, ptr 0xf38ea000
) = 26
exit_group(0) = ?
+++ exited with 0 +++
~/qemu$
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1462640
Title:
shmat fails on 32-to-64 setup
Status in QEMU:
Confirmed
Bug description:
I am trying to run a guest mips32 program (user mode) on a x86_64 host. The
program fails on a call to shmat() reproducibly. when digging into this
problem, I could make a small guest POC that fails when compiled as i386 (-m32)
running on a x86_64 host, but pass when compiled as 64bit. The problem has to
do with mmap flags.
From what I can understand, when running 32bits guests programs, qemu
reserve the whole guest virtual space with an mmap call. That mmap
call specifys MAP:PRIVATE flag. When shmat is called, it tries to make
part of that region MAP_SHARED and that fails.
As a possible fix, it looks like it is possible to first unmap the shm
region before calling shmat.
steps to reproduce:
1 - create a file shm.c with content below
2 - compile with: gcc -m32 shm.c -o shm32
3 - run on a x86_64 host: qemu-i386 ./shm32
4 - observe shmat fails, by returning ptr -1
5- compile without -m32: : gcc shm.c -o shm64
6 - observe it pass: qemu-x84_64 ./shm64
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/mman.h>
#include <stdio.h>
int main()
{
struct shmid_ds shm_desc;
int err = 0;
int id = shmget(IPC_PRIVATE, 688128, IPC_CREAT|IPC_EXCL|0666);
err = shmctl(id, IPC_STAT, &shm_desc);
const void *at = 0x7f7df38ea000;
void* ptr = shmat(id, at, 0);
printf( "got err %d, ptr %p\n", err, ptr );
}
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1462640/+subscriptions
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Launchpad Bug Tracker, 2019/07/05
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Ari Sundholm, 2019/07/05
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Alex Bennée, 2019/07/05
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Ari Sundholm, 2019/07/05
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup,
Ari Sundholm <=
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Laurent Vivier, 2019/07/05
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Ari Sundholm, 2019/07/05
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Laurent Vivier, 2019/07/05
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Peter Maydell, 2019/07/05
- [Qemu-devel] [Bug 1462640] Re: shmat fails on 32-to-64 setup, Ari Sundholm, 2019/07/05