blob: 205f8cfbee224ea268aef122a4290413125ad437 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
chown() fails when it should succeed in QEMU user mode on Linux/sparc64
Description of problem:
The `chown()` function fails, instead of succeeding, in a particular situation.
Steps to reproduce:
[foo.c](/uploads/630d9b83671a071f4ded4da43b6c1b9b/foo.c)
1.
```
# apt install g++-10-sparc64-linux-gnu
# mkdir -p /usr/sparc64-linux-gnu/etc
# touch /usr/sparc64-linux-gnu/etc/ld.so.cache
```
2.
```
$ sparc64-linux-gnu-gcc-10 -Wall -static foo.c
```
[a.out](/uploads/bbab43a1b78e6d16ee13e0eff5e963a5/a.out)
3. Transfer the a.out file to a Linux/sparc64 machine; execute these commands there:
```
$ id
```
Verify that you are in 2 or more groups.
```
$ touch file
$ ln -s file link
$ ln -s link link2
$ ./a.out; echo $?
```
It prints `0`.
4.
```
$ id
```
Verify that you are in 2 or more groups.
```
$ touch file
$ ln -s file link
$ ln -s link link2
$ QEMU_LD_PREFIX=/usr/sparc64-linux-gnu ~/inst-qemu/6.1.0/bin/qemu-sparc64 ./a.out; echo $?
```
Expected: `0`
Actual:
```
chown: Operation not permitted
1
```
Additional information:
|