From patchwork Wed Mar 1 08:44:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: yang shukui X-Patchwork-Id: 734121 X-Patchwork-Delegate: dwmw2@infradead.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vY8MB1tHcz9s7v for ; Wed, 1 Mar 2017 19:51:49 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="jNRsQkzt"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Date:Message-ID:Subject:From:To: Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=kOQiHSJV7wSC59uPM4HDb23hwn+MxrvLQ5ojD/awND4=; b=jNRsQkztj2FgOL 1/Y1pwYYDQqW5+Tl8+eQbSzqdLj8NZ6xgnXaI9QE5e255gFoxPo8HBc5mF6de6Xj1OY0duPrNmuSi L3cUVrT/3gdaC0+YvjuO5rIGRQgK29nIdbFJcJwBGQnbS3FFIaS35SjTKLfOvYbUxUte+1kd3xn6a gbLnIMt7jvbw+jGq8ml9+4kSk1pDCkoT1EdsmLLZxt3iwRt1xt913wD8y9XvEz5AdxYJ1znf65lJz iv9w8wNr3a3VaNEJUB1Pde+SrUKibuQuNDRsJdeKZUVoWb4L0jTdzCPzGwEILhGOkYPNYqUZ6QYHE t29Ri/17JbvLVlx+LTbA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1cizz9-00014W-9F; Wed, 01 Mar 2017 08:51:47 +0000 Received: from [45.249.212.189] (helo=dggrg03-dlp.huawei.com) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1cizyc-0007TF-Kt for linux-mtd@lists.infradead.org; Wed, 01 Mar 2017 08:51:23 +0000 Received: from 172.30.72.56 (EHLO DGGEML402-HUB.china.huawei.com) ([172.30.72.56]) by dggrg03-dlp.huawei.com (MOS 4.4.6-GA FastPath queued) with ESMTP id AJI09907; Wed, 01 Mar 2017 16:47:05 +0800 (CST) Received: from [127.0.0.1] (10.177.248.94) by DGGEML402-HUB.china.huawei.com (10.3.17.38) with Microsoft SMTP Server id 14.3.301.0; Wed, 1 Mar 2017 16:47:01 +0800 To: , , From: yangshukui Subject: Bug fix for uid/gid in jffs2 Message-ID: <58B689F1.3000000@huawei.com> Date: Wed, 1 Mar 2017 16:44:33 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 X-Originating-IP: [10.177.248.94] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A010206.58B68A8B.012B, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2014-11-16 11:51:01, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: f1fc7d27801a5069c484483be6d60a83 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170301_005115_926905_395AF0C6 X-CRM114-Status: GOOD ( 12.11 ) X-Spam-Score: -1.1 (-) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-1.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.8 RDNS_NONE Delivered to internal network by a host with no rDNS X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org As we kown that uid is u32(__kernel_uid32_t) in linux, but uid is u16(jint16_t) in jffs2 ,so jffs2 has the following problem, mount -t jffs2 /dev/mtdblock0 /mnt touch /mnt/a chown 65535.65535 /mnt/a;ls -n /mnt total 1 -rw-r--r-- 1 65535 65535 2 Mar 1 11:53 a chown 65536.65536 /mnt/a;ls -n /mnt total 1 -rw-r--r-- 1 0 0 2 Mar 1 11:53 a chown 65537.65537 /mnt/a;ls -n /mnt total 1 -rw-r--r-- 1 1 1 2 Mar 1 11:53 a The patch bellow will fix it. From 0ab0c9a341e642345b8cf02a029ddc44421379c3 Mon Sep 17 00:00:00 2001 From: Shukui Yang Date: Wed, 1 Mar 2017 16:06:33 +0800 Subject: [PATCH] uid/gid use jint32_t in jffs2 Signed-off-by: Shukui Yang --- fs/jffs2/debug.c | 4 ++-- fs/jffs2/file.c | 8 ++++---- fs/jffs2/fs.c | 22 +++++++++++----------- fs/jffs2/gc.c | 12 ++++++------ fs/jffs2/readinode.c | 4 ++-- fs/jffs2/super.c | 2 +- include/uapi/linux/jffs2.h | 4 ++-- 7 files changed, 28 insertions(+), 28 deletions(-) jint32_t mtime; /* Last modification time. */ diff --git a/fs/jffs2/debug.c b/fs/jffs2/debug.c index 9d26b1b9..5e37393 100644 --- a/fs/jffs2/debug.c +++ b/fs/jffs2/debug.c @@ -814,8 +814,8 @@ void __jffs2_dbg_superblock_counts(struct jffs2_sb_info *c) printk(JFFS2_DBG "ino:\t%#08x\n", je32_to_cpu(node.i.ino)); printk(JFFS2_DBG "version:\t%#08x\n", je32_to_cpu(node.i.version)); printk(JFFS2_DBG "mode:\t%#08x\n", node.i.mode.m); - printk(JFFS2_DBG "uid:\t%#04x\n", je16_to_cpu(node.i.uid)); - printk(JFFS2_DBG "gid:\t%#04x\n", je16_to_cpu(node.i.gid)); + printk(JFFS2_DBG "uid:\t%#08x\n", je32_to_cpu(node.i.uid)); + printk(JFFS2_DBG "gid:\t%#08x\n", je32_to_cpu(node.i.gid)); printk(JFFS2_DBG "isize:\t%#08x\n", je32_to_cpu(node.i.isize)); printk(JFFS2_DBG "atime:\t%#08x\n", je32_to_cpu(node.i.atime)); printk(JFFS2_DBG "mtime:\t%#08x\n", je32_to_cpu(node.i.mtime)); diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c index c12476e..c5266ba 100644 --- a/fs/jffs2/file.c +++ b/fs/jffs2/file.c @@ -172,8 +172,8 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, ri.ino = cpu_to_je32(f->inocache->ino); ri.version = cpu_to_je32(++f->highest_version); ri.mode = cpu_to_jemode(inode->i_mode); - ri.uid = cpu_to_je16(i_uid_read(inode)); - ri.gid = cpu_to_je16(i_gid_read(inode)); + ri.uid = cpu_to_je32(i_uid_read(inode)); + ri.gid = cpu_to_je32(i_gid_read(inode)); ri.isize = cpu_to_je32(max((uint32_t)inode->i_size, pageofs)); ri.atime = ri.ctime = ri.mtime = cpu_to_je32(get_seconds()); ri.offset = cpu_to_je32(inode->i_size); @@ -280,8 +280,8 @@ static int jffs2_write_end(struct file *filp, struct address_space *mapping, /* Set the fields that the generic jffs2_write_inode_range() code can't find */ ri->ino = cpu_to_je32(inode->i_ino); ri->mode = cpu_to_jemode(inode->i_mode); - ri->uid = cpu_to_je16(i_uid_read(inode)); - ri->gid = cpu_to_je16(i_gid_read(inode)); + ri->uid = cpu_to_je32(i_uid_read(inode)); + ri->gid = cpu_to_je32(i_gid_read(inode)); ri->isize = cpu_to_je32((uint32_t)inode->i_size); ri->atime = ri->ctime = ri->mtime = cpu_to_je32(get_seconds()); diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index 567653f..f75ab395 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c @@ -99,9 +99,9 @@ int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) ri->ino = cpu_to_je32(inode->i_ino); ri->version = cpu_to_je32(++f->highest_version); - ri->uid = cpu_to_je16((ivalid & ATTR_UID)? + ri->uid = cpu_to_je32((ivalid & ATTR_UID)? from_kuid(&init_user_ns, iattr->ia_uid):i_uid_read(inode)); - ri->gid = cpu_to_je16((ivalid & ATTR_GID)? + ri->gid = cpu_to_je32((ivalid & ATTR_GID)? from_kgid(&init_user_ns, iattr->ia_gid):i_gid_read(inode)); if (ivalid & ATTR_MODE) @@ -149,8 +149,8 @@ int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) inode->i_ctime = ITIME(je32_to_cpu(ri->ctime)); inode->i_mtime = ITIME(je32_to_cpu(ri->mtime)); inode->i_mode = jemode_to_cpu(ri->mode); - i_uid_write(inode, je16_to_cpu(ri->uid)); - i_gid_write(inode, je16_to_cpu(ri->gid)); + i_uid_write(inode, je32_to_cpu(ri->uid)); + i_gid_write(inode, je32_to_cpu(ri->gid)); old_metadata = f->metadata; @@ -276,8 +276,8 @@ struct inode *jffs2_iget(struct super_block *sb, unsigned long ino) goto error; inode->i_mode = jemode_to_cpu(latest_node.mode); - i_uid_write(inode, je16_to_cpu(latest_node.uid)); - i_gid_write(inode, je16_to_cpu(latest_node.gid)); + i_uid_write(inode, je32_to_cpu(latest_node.uid)); + i_gid_write(inode, je32_to_cpu(latest_node.gid)); inode->i_size = je32_to_cpu(latest_node.isize); inode->i_atime = ITIME(je32_to_cpu(latest_node.atime)); inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime)); @@ -441,14 +441,14 @@ struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_r memset(ri, 0, sizeof(*ri)); /* Set OS-specific defaults for new inodes */ - ri->uid = cpu_to_je16(from_kuid(&init_user_ns, current_fsuid())); + ri->uid = cpu_to_je32(from_kuid(&init_user_ns, current_fsuid())); if (dir_i->i_mode & S_ISGID) { - ri->gid = cpu_to_je16(i_gid_read(dir_i)); + ri->gid = cpu_to_je32(i_gid_read(dir_i)); if (S_ISDIR(mode)) mode |= S_ISGID; } else { - ri->gid = cpu_to_je16(from_kgid(&init_user_ns, current_fsgid())); + ri->gid = cpu_to_je32(from_kgid(&init_user_ns, current_fsgid())); } /* POSIX ACLs have to be processed now, at least partly. @@ -470,8 +470,8 @@ struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_r set_nlink(inode, 1); inode->i_ino = je32_to_cpu(ri->ino); inode->i_mode = jemode_to_cpu(ri->mode); - i_gid_write(inode, je16_to_cpu(ri->gid)); - i_uid_write(inode, je16_to_cpu(ri->uid)); + i_gid_write(inode, je32_to_cpu(ri->gid)); + i_uid_write(inode, je32_to_cpu(ri->uid)); inode->i_atime = inode->i_ctime = inode->i_mtime = current_time(inode); ri->atime = ri->mtime = ri->ctime = cpu_to_je32(I_SEC(inode->i_mtime)); diff --git a/fs/jffs2/gc.c b/fs/jffs2/gc.c index 9ed0f26..ff43ea4 100644 --- a/fs/jffs2/gc.c +++ b/fs/jffs2/gc.c @@ -818,8 +818,8 @@ static int jffs2_garbage_collect_metadata(struct jffs2_sb_info *c, struct jffs2_ ri.ino = cpu_to_je32(f->inocache->ino); ri.version = cpu_to_je32(++f->highest_version); ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f)); - ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); - ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); + ri.uid = cpu_to_je32(JFFS2_F_I_UID(f)); + ri.gid = cpu_to_je32(JFFS2_F_I_GID(f)); ri.isize = cpu_to_je32(ilen); ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); @@ -1089,8 +1089,8 @@ static int jffs2_garbage_collect_hole(struct jffs2_sb_info *c, struct jffs2_eras ilen = JFFS2_F_I_SIZE(f); ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f)); - ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); - ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); + ri.uid = cpu_to_je32(JFFS2_F_I_UID(f)); + ri.gid = cpu_to_je32(JFFS2_F_I_GID(f)); ri.isize = cpu_to_je32(ilen); ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); @@ -1363,8 +1363,8 @@ static int jffs2_garbage_collect_dnode(struct jffs2_sb_info *c, struct jffs2_era ri.ino = cpu_to_je32(f->inocache->ino); ri.version = cpu_to_je32(++f->highest_version); ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f)); - ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); - ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); + ri.uid = cpu_to_je32(JFFS2_F_I_UID(f)); + ri.gid = cpu_to_je32(JFFS2_F_I_GID(f)); ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f)); ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c index 06a71db..74306bb 100644 --- a/fs/jffs2/readinode.c +++ b/fs/jffs2/readinode.c @@ -1195,8 +1195,8 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c, latest_node->version = cpu_to_je32(0); latest_node->atime = latest_node->ctime = latest_node->mtime = cpu_to_je32(0); latest_node->isize = cpu_to_je32(0); - latest_node->gid = cpu_to_je16(0); - latest_node->uid = cpu_to_je16(0); + latest_node->gid = cpu_to_je32(0); + latest_node->uid = cpu_to_je32(0); if (f->inocache->state == INO_STATE_READING) jffs2_set_inocache_state(c, f->inocache, INO_STATE_PRESENT); return 0; diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c index 5ef21f4..2a29ba2 100644 --- a/fs/jffs2/super.c +++ b/fs/jffs2/super.c @@ -369,7 +369,7 @@ static int __init init_jffs2_fs(void) hope the structs are the right sizes, instead. */ BUILD_BUG_ON(sizeof(struct jffs2_unknown_node) != 12); BUILD_BUG_ON(sizeof(struct jffs2_raw_dirent) != 40); - BUILD_BUG_ON(sizeof(struct jffs2_raw_inode) != 68); + BUILD_BUG_ON(sizeof(struct jffs2_raw_inode) != 72); BUILD_BUG_ON(sizeof(struct jffs2_raw_summary) != 32); pr_info("version 2.2." diff --git a/include/uapi/linux/jffs2.h b/include/uapi/linux/jffs2.h index a18b719..2d4f04f 100644 --- a/include/uapi/linux/jffs2.h +++ b/include/uapi/linux/jffs2.h @@ -146,8 +146,8 @@ struct jffs2_raw_inode jint32_t ino; /* Inode number. */ jint32_t version; /* Version number. */ jmode_t mode; /* The file's type or mode. */ - jint16_t uid; /* The file's owner. */ - jint16_t gid; /* The file's group. */ + jint32_t uid; /* The file's owner. */ + jint32_t gid; /* The file's group. */ jint32_t isize; /* Total resultant size of this inode (used for truncations) */ jint32_t atime; /* Last access time. */