Re: [Bug 213785] New: hugetlbfs scrambles mode when sticky bit is set

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add David, Al

On 7/20/21 3:07 PM, Andrew Morton wrote:
>> https://bugzilla.kernel.org/show_bug.cgi?id=213785
>>
>>            Summary: hugetlbfs scrambles mode when sticky bit is set
>>            Product: Memory Management
>>            Version: 2.5
>>     Kernel Version: >4.19 (certainly >= 5.4)
>>         Regression: Yes
>>
>> I noticed the following strange behaviour with hugetlbfs mounts for kernel
>> versions something north of 4.19, but certainly since 5.4:
>>
>> when the mode= option of the mount has the sticky bit set, the mode of the
>> mount point gets scrambled.
>>
>> To test the following command line can be used:
>> mkdir -p /tmp/tlbtest && mount -t hugetlbfs -o mode=.... none /tmp/tlbtest &&
>> stat -c 'mode: %04a' /tmp/tlbtest
>>
>> For kernel versions <= 4.19 or if the first byte of mode is 0, stat outputs
>> what was set using "-o mode".
>>
>> But on newer kernel versions if the first byte of mode is 1 the output of stat
>> is as follows (input -> output):
>> 1700 -> 1244
>> 1750 -> 1326
>> 1770 -> 1352
>> 1775 -> 1357
>> 1777 -> 1361
>>
>> The behaviour is reproducible across different kernel versions and
>> architectures (5.4.47-amd64, 5.9.8-amd64, 5.10.40-ppc64el, 5.12.15-amd64).

I took a quick look and believe a change in behavior was caused by
commit 32021982a324 "Convert the hugetlbfs to use the fs_context
during mount".

Prior to the commit, code processing the mode option used
match_octal() to convert the command line string to a numeric value.
Since match_octal expects a string representing an octal value, it does
not require a leading '0'.  As a result, prior to this commit the
argument 'mode=1700' would result in a mode value of 01700.  After the
commit one must precede octal values with 0.  So, mode=1700 would result
in a mode value of 03244 (& 01777U) = 1244.

If my analysis is correct, I am not sure how to proceed.  IMO, the
current behavior is 'more correct'.  However, until v5.1 a preceeding 0
was not required when specifying mode for hugetlbfs.  So, this was
certainly a change in behavior.  Suggestions?  
-- 
Mike Kravetz




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux