On 2011-06-09 22:59 +0200, Bob Proulx wrote:
> Johan Oudinet wrote:
>> GNU coreutils 8.5
>> Ubuntu 10.10 32bits Ext4
>>
>> $ sudo touch f; ln f g
>> ln: creating hard link `g' => `f': Operation not permitted
>
> Thank you for the bug report. However I am unable to recreate this
> problem using 8.5 on my Debian system using ext3.
>
> $ sudo touch f
> $ ln f g
> $ ls -ldog f g
> -rw-r--r-- 2 0 Jun 9 14:55 f
> -rw-r--r-- 2 0 Jun 9 14:55 g
>
> Perhaps this is a problem with ext4? Can you run your test using
> strace so that we can see what the system is saying? Something like
> this following command.
>
> $ strace -e trace=file -o /tmp/ln.strace.out ln f g
>
> On my system I see this output:
>
> ...
> stat("g", 0x7fffa6430f10) = -1 ENOENT (No such file or
> directory)
> lstat("f", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
> linkat(AT_FDCWD, "f", AT_FDCWD, "g", 0) = 0
>
>> However, the following commands work:
>> $ sudo touch f2; sudo chmod a+w f2; ln f2 g
>>
>> The first call to ln should be permitted too.
>
> As far as I can tell it is permitted. If it isn't then it would be a
> kernel limitation.
This is indeed due to an Ubuntu kernel patch that is present since
10.10. The rationale is given in
https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#Hardlink%20Protection.
I'm taking the liberty to close the bug.
Cheers,
Sven