[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <bc72d312-07ce-51a3-4554-358d074f9c7d@huawei.com>
Date: Mon, 13 May 2019 15:03:40 +0200
From: Roberto Sassu <roberto.sassu@...wei.com>
To: Jann Horn <jannh@...gle.com>
CC: <viro@...iv.linux.org.uk>, <linux-security-module@...r.kernel.org>,
<linux-integrity@...r.kernel.org>, <initramfs@...r.kernel.org>,
<linux-api@...r.kernel.org>, <linux-fsdevel@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <zohar@...ux.vnet.ibm.com>,
<silviu.vlasceanu@...wei.com>, <dmitry.kasatkin@...wei.com>,
<takondra@...co.com>, <kamensky@...co.com>, <hpa@...or.com>,
<arnd@...db.de>, <rob@...dley.net>, <james.w.mcmechan@...il.com>
Subject: Re: [PATCH v2 3/3] initramfs: introduce do_readxattrs()
On 5/10/2019 11:33 PM, Jann Horn wrote:
> On Thu, May 09, 2019 at 01:24:20PM +0200, Roberto Sassu wrote:
>> This patch adds support for an alternative method to add xattrs to files in
>> the rootfs filesystem. Instead of extracting them directly from the ram
>> disk image, they are extracted from a regular file called .xattr-list, that
>> can be added by any ram disk generator available today.
> [...]
>> +struct path_hdr {
>> + char p_size[10]; /* total size including p_size field */
>> + char p_data[]; /* <path>\0<xattrs> */
>> +};
>> +
>> +static int __init do_readxattrs(void)
>> +{
>> + struct path_hdr hdr;
>> + char str[sizeof(hdr.p_size) + 1];
>> + unsigned long file_entry_size;
>> + size_t size, name_buf_size, total_size;
>> + struct kstat st;
>> + int ret, fd;
>> +
>> + ret = vfs_lstat(XATTR_LIST_FILENAME, &st);
>> + if (ret < 0)
>> + return ret;
>> +
>> + total_size = st.size;
>> +
>> + fd = ksys_open(XATTR_LIST_FILENAME, O_RDONLY, 0);
>> + if (fd < 0)
>> + return fd;
>> +
>> + while (total_size) {
>> + size = ksys_read(fd, (char *)&hdr, sizeof(hdr));
> [...]
>> + ksys_close(fd);
>> +
>> + if (ret < 0)
>> + error("Unable to parse xattrs");
>> +
>> + return ret;
>> +}
>
> Please use something like filp_open()+kernel_read()+fput() instead of
> ksys_open()+ksys_read()+ksys_close(). I understand that some of the init
> code needs to use the syscall wrappers because no equivalent VFS
> functions are available, but please use the VFS functions when that's
> easy to do.
Ok. Thanks for the suggestion.
Roberto
--
HUAWEI TECHNOLOGIES Duesseldorf GmbH, HRB 56063
Managing Director: Bo PENG, Jian LI, Yanli SHI
Powered by blists - more mailing lists