ubifsmount fails due to not initialized list
PATCH 1/1 ubifsmount fails due to not initialized list
ubifsmount is not working and causes an access with a pointer set to zero because the ubifs_fs_type is not initialized correctly.
--- fs/ubifs/super.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
fs/ubifs/super.c +1 -0
@@ -1178,6 +1178,7 @@ int ubifs_mount(char *vol_name)ubifs_umount (ubifs_sb->s_fs_info);INIT_LIST_HEAD (&ubifs_infos); +INIT_LIST_HEAD (&ubifs_fs_type.fs_supers);/* * Mount in read-only mode
Signature · 1 line
1.6.3.3
PATCH 1/1 ubifsmount fails due to not initialized list
Quoted 3 lines · On Wednesday 21 April 2010 09:47:19 Stefano Babic wrote:
ubifsmount is not working and causes an access with a pointer set to zero because the
ubifs_fs_typeis not initialized correctly.
Applied to u-boot-ubi/master. Thanks.
Cheers,
Stefan
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de
PATCH 1/1 ubifsmount fails due to not initialized list
In reply to Stefano BabicQuoted 24 lines · Stefano Babic
ubifsmount is not working and causes an access with a pointer set to zero because the
ubifs_fs_typeis not initialized correctly.Signed-off-by Stefano Babic <[email protected]>--- fs/ubifs/super.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)fs/ubifs/super.c +1
-1@@ -1178,6 +1178,7 @@ int ubifs_mount(char *vol_name)ubifs_umount (ubifs_sb->s_fs_info);INIT_LIST_HEAD (&ubifs_infos); +INIT_LIST_HEAD (&ubifs_fs_type.fs_supers);/* * Mount in read-only mode -- 1.6.3.3
Quoted 1 line
Out of interest, how did something like this get away with only causing an
occasional failure?
Quoted 5 lines
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot
PATCH 1/1 ubifsmount fails due to not initialized list
Quoted 2 lines · Quotient Remainder
Out of interest, how did something like this get away with only causing an occasional failure?
Well, there are some explanations. MMU is normally off and a Null Pointer does not cause an exception in u-boot. If we get a failure, it depends on the architecture we are using. On PowerPC, address 0 is accessible and then we get no failure. In this particular case (ubifsmount), the list is set but not used by the calling function. Because writing to address 0 is allowed, the bug is not noticeable.
Different is on arm, where I have found the problem. Because in this case address 0 is not accessible at all, u-boot hangs and it is not possible to avoid to see that we have a problem....
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de =====================================================================
PATCH 1/1 ubifsmount fails due to not initialized list
Quoted 12 lines · Stefano Babic
Quoted 2 lines · Quotient Remainder
Out of interest, how did something like this get away with only causing an occasional failure?
Well, there are some explanations. MMU is normally off and a Null Pointer does not cause an exception in u-boot. If we get a failure, it depends on the architecture we are using. On PowerPC, address 0 is accessible and then we get no failure. In this particular case (ubifsmount), the list is set but not used by the calling function. Because writing to address 0 is allowed, the bug is not noticeable.
Quoted 5 lines
Different is on arm, where I have found the problem. Because in this case address 0 is not accessible at all, u-boot hangs and it is not possible to avoid to see that we have a problem....
I've been using UBIFS on arm (1136) with the v2009.11 release and it works almost all the time. Sometimes U-Boot fails to mount the UBIFS (1 in 100 boots, maybe), and in these cases I was putting it down to forgetting to do a sync in Linux before rebooting. I wonder if this was the problem all along...
Quoted 10 lines
Best regards,
Stefano Babic--
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
PATCH 1/1 ubifsmount fails due to not initialized list
Hi,
Quoted 19 lines · Quotient Remainder
Quoted 12 lines · Stefano Babic
Quoted 2 lines · Quotient Remainder
Out of interest, how did something like this get away with only causing an occasional failure?
Well, there are some explanations. MMU is normally off and a Null Pointer does not cause an exception in u-boot. If we get a failure, it depends on the architecture we are using. On PowerPC, address 0 is accessible and then we get no failure. In this particular case (ubifsmount), the list is set but not used by the calling function. Because writing to address 0 is allowed, the bug is not noticeable.
Quoted 5 lines
Different is on arm, where I have found the problem. Because in this case address 0 is not accessible at all, u-boot hangs and it is not possible to avoid to see that we have a problem....
Quoted 5 lines
I've been using UBIFS on arm (1136) with the v2009.11 release and it works almost all the time. Sometimes U-Boot fails to mount the UBIFS (1 in 100 boots, maybe), and in these cases I was putting it down to forgetting to do a sync in Linux before rebooting. I wonder if this was the problem all along...
Probably not.
IMHO rebooting without a sync is pretty common and should work.
With v2009.11 and the "INIT_LIST_HEAD(&ubifs_fs_type.fs_supers);" fix I was able to force a mount-failure of UBIFS in u-boot by executing some tar under linux in parallel
and pulling the plug in the meantime:
"tar zxf some_tar.tgz & mkdir -p P; tar zxf some_tar.tgz -C P"
I fixed it ("fixed" as in http://thereifixedit.com) by disabling journal-replaying.
In fs/ubifs/super.c:686 I skipped "ubifs_replay_journal(c)".
Without that "fix" I needed the linux kernel to once mount the volume and replay the journal. Afterwards everything was fine on next volume mount in u-boot.
I failed to find the cause in ubifs_replay_journal().
How harmful is the skipping of ubifs_replay_journal() ? Does someone have a real fix ?
Christian Hohnstaedt
Signature · 9 lines
Christian Hohnstaedt / Project Manager Hardware and Manufacturing Innominate Security Technologies AG / protecting industrial networks tel: +49.30.921028.208 / fax: +49.30.921028.020 Rudower Chaussee 13, D-12489 Berlin / http://www.innominate.com Register Court: AG Charlottenburg, HR B 81603 Management Board: Dirk Seewald Chairman of the Supervisory Board: Volker Bibelhausen