Re: kernel 2.4.27-10: isofs driver ignore some parameters with mount

From: Horms
Date: Tue Aug 16 2005 - 00:33:21 EST


On Mon, Aug 15, 2005 at 10:11:21PM -0300, Marcelo Tosatti wrote:
>
> Hi folks,
>
> On Fri, Aug 12, 2005 at 05:29:36PM +0900, Horms wrote:
> > On Fri, Aug 12, 2005 at 10:44:17AM +0300, Alexander Pytlev wrote:
> > > Hello Debian,
> > >
> > > Kernel 2.4.27-10
> > > With mount isofs filesystem, any mount parameters after
> > > iocharset=,map=,session= are ignored.
> > >
> > > Sample:
> > >
> > > mount -t isofs -o uid=100,iocharset=koi8-r,gid=100 /dev/cdrom /media/cdrom
> > >
> > > gid=100 - was ignored
> > >
> > > I look in source and find that problem. I make two patch, simply and full
> > > (what addeded some functionality - ignore wrong mount parameters)
> >
> > Thanks,
> >
> > I will try and get the simple version of this patch into the next
> > Sarge update.
> >
> > I have also CCed Marcelo and the LKML for their consideration,
> > as this problem still seems to be present in the lastest 2.4 tree.
> >
> > --
> > Horms
> >
> > simply patch:
> > ===================================================================================
> > --- kernel-source-2.4.27/fs/isofs/inode.c 2005-05-19 13:29:39.000000000 +0300
> > +++ kernel-source/fs/isofs/inode.c 2005-08-11 11:55:12.000000000 +0300
> > @@ -340,13 +340,13 @@
> > else if (!strcmp(value,"acorn")) popt->map = 'a';
> > else return 0;
> > }
> > - if (!strcmp(this_char,"session") && value) {
> > + else if (!strcmp(this_char,"session") && value) {
> > char * vpnt = value;
> > unsigned int ivalue = simple_strtoul(vpnt, &vpnt, 0);
> > if(ivalue < 0 || ivalue >99) return 0;
> > popt->session=ivalue+1;
> > }
> > - if (!strcmp(this_char,"sbsector") && value) {
> > + else if (!strcmp(this_char,"sbsector") && value) {
> > char * vpnt = value;
> > unsigned int ivalue = simple_strtoul(vpnt, &vpnt, 0);
> > if(ivalue < 0 || ivalue >660*512) return 0;
> > ===================================================================================
>
> Neither "sbsector" or "session" parameters are part of the options string used
> in Alexander's example, so how come this patch can make any difference?
>
> Usage of "sbsector" or "session" parameters could explain the above patch
> making a difference because the buggy, always true "(unsigned long) ivalue < 0"
> comparison invokes "return 0", but that is not the case.
>
> The code after the "popt->iocharset = value;" does not make any sense.
>
> It seems that the "*value = 0" assignment can screw up the rest of the
> string, isnt that the real issue?
>
> #ifdef CONFIG_JOLIET
> if (!strcmp(this_char,"iocharset") && value) {
> popt->iocharset = value;
> while (*value && *value != ',')
> value++;
> if (value == popt->iocharset)
> return 0;
> *value = 0;
> } else
> #endif

Sorry about that, while the patch above does seem to be
a valid clean up, on further examination I agree that it
does not address the problem at hand, and that the problem seems
to lie in the *value assignment as you suggest. I wonder
if advancing this_char to the character aftter value, if
non-NULL would resolve this problem. I'll do some testing,
but in the mean time, here is what I have in mind:

--- a/fs/isofs/inode.c 2005-08-16 14:22:27.000000000 +0900
+++ b/fs/isofs/inode.c 2005-08-16 14:27:55.000000000 +0900
@@ -329,7 +329,10 @@
value++;
if (value == popt->iocharset)
return 0;
- *value = 0;
+ if (*value) {
+ this_char = value + 1;
+ *value = 0;
+ }
} else
#endif
if (!strcmp(this_char,"map") && value) {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/