From: "Guo Hongruan" <[email protected]>
Subject: Re: [LTP] patch for mount02.c and mount03.c bugs(maybe)
Date: Sun, 12 Apr 2009 11:00:48 +0800
> Hi, Qian
> The LTP I used is LTP-20090131. Maybe mount03.c has changed since
> then. For mount03.c, it does not work on my site.
>
> Let's support we execute mount03 using the following command:
>
> mount03 -D /dev/hda2 -T ext2
>
> look at the following code in mount03.c
>
> before applying the patch
> 172 if (Tflag) {
> /*the space using to store Fstype is strlen("ext2")==4,
> the return value
> of strlen does not include
> the terminating `\0' character */
> 173 Fstype = (char *) malloc(strlen(fstype));
> 174 if (Fstype == NULL) {
> 175 tst_brkm(TBROK, NULL, "malloc failed to alloc %d errno "
> 176 " %d ", strlen(fstype), errno);
> 177 }
> /*the Fstype context is "ext2", Note that, it is
> without the '\0'
> terminating character,
> so when printf("%s", Fstype), the content is
> undetermined*/
> 178 strncpy(Fstype, fstype, strlen(fstype));
> 179 } else {
> 180 Fstype = (char *) malloc(strlen(DEFAULT_FSTYPE));
> 181 if (Fstype == NULL) {
> 182 tst_brkm(TBROK, NULL, "malloc failed to alloc %d errno "
> 183 " %d ", strlen(fstype), errno);
> 184 }
Yes, you are right. Can you also update the above error messages -- line
175 and 182 (strlen(fstype) is totally wrong here) to have the correct
number of bytes?
Thanks,
CAI Qian
> 185 strncpy(Fstype, DEFAULT_FSTYPE, strlen(DEFAULT_FSTYPE));
> 186 }
>
> after applying the patch.
> 172 if (Tflag) {
> /*We must allocate enough space to store the whole
> string including '\0'
> terminating character*/
> 173 Fstype = (char *) malloc(strlen(fstype)+1);
> 174 if (Fstype == NULL) {
> 175 tst_brkm(TBROK, NULL, "malloc failed to alloc %d errno "
> 176 " %d ", strlen(fstype), errno);
> 177 }
> /*memset ensures the terminating character exist for
> any cases.*/
> 178 memset(Fstype, 0, strlen(fstype)+1);
> 179 strncpy(Fstype, fstype, strlen(fstype));
> 180 } else {
> 181 Fstype = (char *) malloc(strlen(DEFAULT_FSTYPE)+1);
> 182 if (Fstype == NULL) {
> 183 tst_brkm(TBROK, NULL, "malloc failed to alloc %d errno "
> 184 " %d ", strlen(fstype), errno);
> 185 }
> 186 memset(Fstype, 0, strlen(DEFAULT_FSTYPE)+1);
> 187 strncpy(Fstype, DEFAULT_FSTYPE, strlen(DEFAULT_FSTYPE));
> 188 }
>
>
> On Sat, 11 Apr 2009 15:55:36 +0800, CAI Qian <[email protected]> wrote:
>
>>
>> Hi,
>>
>> --- On Thu, 4/9/09, Guo Hongruan <[email protected]> wrote:
>>
>>> From: Guo Hongruan <[email protected]>
>>> Subject: [LTP] patch for mount02.c and mount03.c bugs(maybe)
>>> To: [email protected]
>>> Date: Thursday, April 9, 2009, 11:41 AM
>>> Hi, Guys,
>>> I think I found a bug of mount02.c and
>>> mount03.c which can not validate
>>> mount system call correctly. I did the following change, on
>>> my sites, it
>>> works OK. Here is the patch, hope it is useful.
>>>
>>> Running these testcases manually can
>>> reproduce this bug:
>>> mount02 -D /dev/hda2 -T ext2
>>> mount03 -D /dev/hda2 -T ext2
>>>
>>
>> I can reproduce the problem with mount02, and confirm the patch works.
>> However, mount03 does not fail for me without the patch.
>>
>> # # ./mount03 -D /dev/sdb1 -T ext2
>> mount03 1 PASS : mount(2) Passed for rwflag MS_RDONLY - mount read-only
>> mount03 2 PASS : mount(2) Passed for rwflag MS_NODEV - disallow access
>> to device special files
>> mount03 3 PASS : mount(2) Passed for rwflag MS_NOEXEC - disallow program
>> execution
>> mount03 4 PASS : mount(2) Passed for rwflag MS_SYNCHRONOUS - writes are
>> synced at once
>> mount03 5 PASS : mount(2) Passed for rwflag MS_REMOUNT - alter flags of
>> a mounted FS
>> mount03 6 PASS : mount(2) Passed for rwflag MS_NOSUID - ignore suid and
>> sgid bits
>>
>> Can you describe a little bit about the problem you were facing with
>> mount03?
>>
>> CAI Qian
>>
>>> Index: testcases/kernel/syscalls/mount/mount02.c
>>> ===================================================================
>>> ---
>>> testcases/kernel/syscalls/mount/mount02.c (revision
>>> 297)
>>> +++
>>> testcases/kernel/syscalls/mount/mount02.c (working
>>> copy)
>>> @@ -414,8 +414,8 @@
>>>
>>> if (Tflag) {
>>>
>>> /* Avoid buffer
>>> overflow */
>>>
>>> strncpy(Type,
>>> fstype,
>>> -
>>>
>>> (FSTYPE_LEN < strlen(fstype)) ?
>>> FSTYPE_LEN
>>> :
>>> -
>>>
>>> strlen(fstype));
>>> +
>>>
>>> (FSTYPE_LEN < strlen(fstype)+1) ?
>>>
>>> FSTYPE_LEN :
>>> +
>>>
>>> strlen(fstype)+1);
>>>
>>> } else {
>>>
>>> strcpy(Type,
>>> "ext2");
>>>
>>> }
>>>
>>>
>>> Index: mount03.c
>>> ===================================================================
>>> --- mount03.c (revision 297)
>>> +++ mount03.c (working copy)
>>> @@ -170,18 +170,20 @@
>>> }
>>>
>>> if (Tflag) {
>>> - Fstype = (char *)
>>> malloc(strlen(fstype));
>>> + Fstype = (char *)
>>> malloc(strlen(fstype)+1);
>>> if (Fstype ==
>>> NULL) {
>>>
>>> tst_brkm(TBROK, NULL, "malloc failed to
>>> alloc %d errno "
>>>
>>> " %d ",
>>> strlen(fstype), errno);
>>> }
>>> + memset(Fstype, 0,
>>> strlen(fstype)+1);
>>>
>>> strncpy(Fstype, fstype, strlen(fstype));
>>> } else {
>>> - Fstype = (char *)
>>> malloc(strlen(DEFAULT_FSTYPE));
>>> + Fstype = (char *)
>>> malloc(strlen(DEFAULT_FSTYPE)+1);
>>> if (Fstype ==
>>> NULL) {
>>>
>>> tst_brkm(TBROK, NULL, "malloc failed to
>>> alloc %d errno "
>>>
>>> " %d ",
>>> strlen(fstype), errno);
>>> }
>>> + memset(Fstype, 0,
>>> strlen(DEFAULT_FSTYPE)+1);
>>>
>>> strncpy(Fstype, DEFAULT_FSTYPE, strlen(DEFAULT_FSTYPE));
>>> }
>>>
>>> @@ -408,6 +410,7 @@
>>>
>>>
>>> strerror(TEST_ERRNO));
>>>
>>> }
>>>
>>> execve(file, NULL,
>>> NULL);
>>> +
>>> exit(-127);
>>>
>>> /* NOT REACHEAD */
>>>
>>> } else {
>>>
>>> waitpid(pid,
>>> &status, 0);
>>>
>>> --
>>> Guo Hongruan, Embedded Linux Consultant
>>> Mobile: +86-0-13484056007
>>> Skype: camelguo
>>> http://www.gulessoft.com
>>>
>>>
> ------------------------------------------------------------------------------
>>> This SF.net email is sponsored by:
>>> High Quality Requirements in a Collaborative Environment.
>>> Download a free trial of Rational Requirements Composer
>>> Now!
>>> http://p.sf.net/sfu/www-ibm-com
>>> _______________________________________________
>>> Ltp-list mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/ltp-list
>>>
>
>
>
> --
> Guo Hongruan, Embedded Linux Consultant
> Mobile: +86-0-13484056007
> Skype: camelguo
> http://www.gulessoft.com
------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list