Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752109AbdINLqF (ORCPT ); Thu, 14 Sep 2017 07:46:05 -0400 Received: from out3-smtp.messagingengine.com ([66.111.4.27]:55509 "EHLO out3-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751701AbdINLqE (ORCPT ); Thu, 14 Sep 2017 07:46:04 -0400 X-ME-Sender: X-Sasl-enc: l1QL/+mUcbv8Is5bC6/Mw9EG7NiBBJ5uj9XjwrcZwskW 1505389562 Subject: Re: [RFC PATCH 1/2] autofs: set compat flag on sbi when daemon uses 32bit addressation To: skinsbursky@virtuozzo.com Cc: autofs@vger.kernel.org, linux-kernel@vger.kernel.org, devel@openvz.org, ldv@altlinux.org References: <20170901110906.2669.1577.stgit@localhost.localdomain> <20170901112144.2669.1453.stgit@localhost.localdomain> <889ec02e-6146-c180-642b-017f6ca71f8a@virtuozzo.com> From: Ian Kent Message-ID: <323d8907-8fd6-2d8d-35a9-272faa7e7811@themaw.net> Date: Thu, 14 Sep 2017 19:45:58 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <889ec02e-6146-c180-642b-017f6ca71f8a@virtuozzo.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2851 Lines: 90 On 14/09/17 19:39, Stanislav Kinsburskiy wrote: > > > 14.09.2017 13:29, Ian Kent пишет: >> On 14/09/17 17:24, Stanislav Kinsburskiy wrote: >>> >>> >>> 14.09.2017 02:38, Ian Kent пишет: >>>> On 01/09/17 19:21, Stanislav Kinsburskiy wrote: >>>>> Signed-off-by: Stanislav Kinsburskiy >>>>> --- >>>>> fs/autofs4/autofs_i.h | 3 +++ >>>>> fs/autofs4/dev-ioctl.c | 3 +++ >>>>> fs/autofs4/inode.c | 4 +++- >>>>> 3 files changed, 9 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git a/fs/autofs4/autofs_i.h b/fs/autofs4/autofs_i.h >>>>> index 4737615..3da105f 100644 >>>>> --- a/fs/autofs4/autofs_i.h >>>>> +++ b/fs/autofs4/autofs_i.h >>>>> @@ -120,6 +120,9 @@ struct autofs_sb_info { >>>>> struct list_head active_list; >>>>> struct list_head expiring_list; >>>>> struct rcu_head rcu; >>>>> +#ifdef CONFIG_COMPAT >>>>> + unsigned is32bit:1; >>>>> +#endif >>>>> }; >>>>> >>>>> static inline struct autofs_sb_info *autofs4_sbi(struct super_block *sb) >>>>> diff --git a/fs/autofs4/dev-ioctl.c b/fs/autofs4/dev-ioctl.c >>>>> index b7c816f..467d6c4 100644 >>>>> --- a/fs/autofs4/dev-ioctl.c >>>>> +++ b/fs/autofs4/dev-ioctl.c >>>>> @@ -397,6 +397,9 @@ static int autofs_dev_ioctl_setpipefd(struct file *fp, >>>>> sbi->pipefd = pipefd; >>>>> sbi->pipe = pipe; >>>>> sbi->catatonic = 0; >>>>> +#ifdef CONFIG_COMPAT >>>>> + sbi->is32bit = is_compat_task(); >>>>> +#endif >>>>> } >>>>> out: >>>>> put_pid(new_pid); >>>>> diff --git a/fs/autofs4/inode.c b/fs/autofs4/inode.c >>>>> index 09e7d68..21d3c0b 100644 >>>>> --- a/fs/autofs4/inode.c >>>>> +++ b/fs/autofs4/inode.c >>>>> @@ -301,7 +301,9 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent) >>>>> } else { >>>>> sbi->oz_pgrp = get_task_pid(current, PIDTYPE_PGID); >>>>> } >>>>> - >>>>> +#ifdef CONFIG_COMPAT >>>>> + sbi->is32bit = is_compat_task(); >>>>> +#endif >>>>> if (autofs_type_trigger(sbi->type)) >>>>> __managed_dentry_set_managed(root); >>>>> >>>>> >>>> >>>> Not sure about this. >>>> >>>> Don't you think it would be better to avoid the in code #ifdefs by doing some >>>> checks and defines in the header file and defining what's need to just use >>>> is_compat_task(). >>>> >>> >>> Yes, might be... >>> >>>> Not sure 2 patches are needed for this either ...... >>>> >>> >>> Well, I found this issue occasionally. >> >> I'm wondering what the symptoms are? >> > > Size of struct autofs_v5_packet is 300 bytes for x86 and 304 bytes for x86_64. > Which means, that 32bit task can read more than size of autofs_v5_packet on 64bit kernel. Are you sure? Shouldn't that be a short read on the x86 side of a 4 bytes longer structure on the x86_64 side. I didn't think you could have a 64 bit client on a 32 bit kernel so the converse (the read past end of struct) doesn't apply. Ian