lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <4679990C.4070801@banksresearch.com>
Date:	Wed, 20 Jun 2007 17:15:56 -0400
From:	Wyatt Banks <wyatt@...ksresearch.com>
To:	linux-kernel@...r.kernel.org
Subject: [RFC PATCH] HFSPlus: fix mount uid/gid bug

From:	Wyatt Banks <wyatt@...ksresearch.com>

HFSPlus: fix broken logic for mount uid=xxx,gid=xxx. (bug 3533)

Signed-off-by	Wyatt Banks <wyatt@...ksresearch.com>

---

Patched against 2.6.21.5

Tested on an x86 machine with USB hard drive formatted by a
PowerPC Mac.

This is a patch to address bug 3533.

The 2 lines that should be setting the uid/gid:

if (!inode->i_uid && !mode)
if (!inode->i_gid && !mode)

always evaluate as false.  mode is the BSD file type and mode bits.
These lines do nothing since the file type bits are not masked off
with S_IFMT.

References:

http://bugzilla.kernel.org/show_bug.cgi?id=3533
http://developer.apple.com/technotes/tn/tn1150.html


diff -uprN -X linux-2.6.21.5/Documentation/dontdiff linux-2.6.21.5/fs/hfsplus/hfsplus_fs.h linux-2.6.21.5-devel/fs/hfsplus/hfsplus_fs.h
--- linux-2.6.21.5/fs/hfsplus/hfsplus_fs.h	2007-06-11 14:37:06.000000000 -0400
+++ linux-2.6.21.5-devel/fs/hfsplus/hfsplus_fs.h	2007-06-16 23:35:43.000000000 -0400
@@ -139,6 +139,8 @@ struct hfsplus_sb_info {
	uid_t uid;
	gid_t gid;

+	int uid_provided, gid_provided;
+
	int part, session;

	unsigned long flags;
diff -uprN -X linux-2.6.21.5/Documentation/dontdiff linux-2.6.21.5/fs/hfsplus/inode.c linux-2.6.21.5-devel/fs/hfsplus/inode.c
--- linux-2.6.21.5/fs/hfsplus/inode.c	2007-06-11 14:37:06.000000000 -0400
+++ linux-2.6.21.5-devel/fs/hfsplus/inode.c	2007-06-18 20:11:18.000000000 -0400
@@ -181,11 +181,11 @@ static void hfsplus_get_perms(struct ino
	mode = be16_to_cpu(perms->mode);

	inode->i_uid = be32_to_cpu(perms->owner);
-	if (!inode->i_uid && !mode)
+	if (HFSPLUS_SB(sb).uid_provided)
		inode->i_uid = HFSPLUS_SB(sb).uid;

	inode->i_gid = be32_to_cpu(perms->group);
-	if (!inode->i_gid && !mode)
+	if (HFSPLUS_SB(sb).gid_provided)
		inode->i_gid = HFSPLUS_SB(sb).gid;

	if (dir) {
diff -uprN -X linux-2.6.21.5/Documentation/dontdiff linux-2.6.21.5/fs/hfsplus/options.c linux-2.6.21.5-devel/fs/hfsplus/options.c
--- linux-2.6.21.5/fs/hfsplus/options.c	2007-06-11 14:37:06.000000000 -0400
+++ linux-2.6.21.5-devel/fs/hfsplus/options.c	2007-06-16 23:36:30.000000000 -0400
@@ -106,6 +106,7 @@ int hfsplus_parse_options(char *input, s
				return 0;
			}
			sbi->uid = (uid_t)tmp;
+			sbi->uid_provided = 1;
			break;
		case opt_gid:
			if (match_int(&args[0], &tmp)) {
@@ -113,6 +114,7 @@ int hfsplus_parse_options(char *input, s
				return 0;
			}
			sbi->gid = (gid_t)tmp;
+			sbi->gid_provided = 1;
			break;
		case opt_part:
			if (match_int(&args[0], &sbi->part)) {
	
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ