All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wyatt Banks <wyatt@banksresearch.com>
To: linux-kernel@vger.kernel.org
Subject: [RFC PATCH] HFSPlus: fix mount uid/gid bug
Date: Wed, 20 Jun 2007 17:15:56 -0400	[thread overview]
Message-ID: <4679990C.4070801@banksresearch.com> (raw)

From:	Wyatt Banks <wyatt@banksresearch.com>

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

Signed-off-by	Wyatt Banks <wyatt@banksresearch.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)) {
	

                 reply	other threads:[~2007-06-20 21:16 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4679990C.4070801@banksresearch.com \
    --to=wyatt@banksresearch.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.