Re: [mmotm:master 8/285] fs//hugetlbfs/inode.c:142:22: note: in expansion of macro 'PGOFF_LOFFT_MAX'

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

 



On 03/14/2018 02:46 PM, Andrew Morton wrote:
> On Wed, 14 Mar 2018 11:52:51 -0700 Mike Kravetz <mike.kravetz@xxxxxxxxxx> wrote:
> 
>> On 03/13/2018 11:15 PM, kbuild test robot wrote:
>>> tree:   git://git.cmpxchg.org/linux-mmotm.git master
>>> head:   ead058c4ec49752a4e0323368f1d695385c66020
>>> commit: af7abfba1161d2814301844fe11adac16910ea80 [8/285] hugetlbfs-check-for-pgoff-value-overflow-v3
>>> config: sh-defconfig (attached as .config)
>>> compiler: sh4-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
>>> reproduce:
>>>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>>>         chmod +x ~/bin/make.cross
>>>         git checkout af7abfba1161d2814301844fe11adac16910ea80
>>>         # save the attached .config to linux build tree
>>>         make.cross ARCH=sh 
>>>
>>> All warnings (new ones prefixed by >>):
>>>
>>>    fs//hugetlbfs/inode.c: In function 'hugetlbfs_file_mmap':
>>>>> fs//hugetlbfs/inode.c:118:36: warning: left shift count is negative [-Wshift-count-negative]
>>>     #define PGOFF_LOFFT_MAX (PAGE_MASK << (BITS_PER_LONG - (2 * PAGE_SHIFT) - 1))
>>>                                        ^
>>
>> BITS_PER_LONG = 32 (32bit config)
>> PAGE_SHIFT = 16 (64K pages)
>> This results in the negative shift value.
>>
>> I had proposed another (not so pretty way) to create the mask.
>>
>> #define PGOFF_LOFFT_MAX \
>> 	(((1UL << (PAGE_SHIFT + 1)) - 1) <<  (BITS_PER_LONG - (PAGE_SHIFT + 1)))
>>
>> This works for the above config, and should work for any.
>>
>> Andrew, how would you like me to update the patch?  I can send a new
>> version but know you have also made some changes for VM_WARN.  Would
>> you simply like a delta on top of the current patch?
> 
> This?

That will do it.  Thank you,
-- 
Mike Kravetz

> 
> From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Subject: hugetlbfs-check-for-pgoff-value-overflow-v3-fix-fix
> 
> fix -ve left shift count on sh
> 
> Cc: "Kirill A . Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx>
> Cc: Michal Hocko <mhocko@xxxxxxxxxx>
> Cc: Mike Kravetz <mike.kravetz@xxxxxxxxxx>
> Cc: Nic Losby <blurbdust@xxxxxxxxx>
> Cc: Yisheng Xie <xieyisheng1@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> ---
> 
>  fs/hugetlbfs/inode.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff -puN mm/hugetlb.c~hugetlbfs-check-for-pgoff-value-overflow-v3-fix-fix mm/hugetlb.c
> diff -puN fs/hugetlbfs/inode.c~hugetlbfs-check-for-pgoff-value-overflow-v3-fix-fix fs/hugetlbfs/inode.c
> --- a/fs/hugetlbfs/inode.c~hugetlbfs-check-for-pgoff-value-overflow-v3-fix-fix
> +++ a/fs/hugetlbfs/inode.c
> @@ -115,7 +115,8 @@ static void huge_pagevec_release(struct
>   * value.  The extra bit (- 1 in the shift value) is to take the sign
>   * bit into account.
>   */
> -#define PGOFF_LOFFT_MAX (PAGE_MASK << (BITS_PER_LONG - (2 * PAGE_SHIFT) - 1))
> +#define PGOFF_LOFFT_MAX \
> +	(((1UL << (PAGE_SHIFT + 1)) - 1) <<  (BITS_PER_LONG - (PAGE_SHIFT + 1)))
>  
>  static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma)
>  {
> _
> 




[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