UDF: possible usage of uninitialized variables
PATCH 1/1 UDF: possible usage of uninitialized variables
A few variables could be used without being explicitly initialized. Fixed.
---
balloc.c | 6 +++++- super.c | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-)
balloc.c +5 -1
@@ -744,7 +744,11 @@ static int udf_table_new_block(struct super_block * sb,uint32_t spread =0xFFFFFFFF , nspread =0xFFFFFFFF ;uint32_t newblock =0 , adsize;uint32_t elen, goal_elen =0 ; -kernel_lb_addr eloc, goal_eloc; +kernel_lb_addr eloc; +kernel_lb_addr goal_eloc = { + .logicalBlockNum =0 , + .partitionReferenceNum =0 , + };struct extent_position epos, goal_epos;int8_t etype;
super.c +4 -1
@@ -1358,7 +1358,10 @@ udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset)case UDF_VIRTUAL_MAP15 :case UDF_VIRTUAL_MAP20 : { -kernel_lb_addr ino; +kernel_lb_addr ino = { + .logicalBlockNum =0 , + .partitionReferenceNum =0 , + };if (!UDF_SB_LASTBLOCK (sb)) {
Quoted 2 lines · On Tue, 22 May 2007 21:52:23 +0400 Cyrill Gorcunov <[email protected]> wrote:
A few variables could be used without being explicitly initialized. Fixed.
Are you sure? I'm expecting that this is a gcc mistake.
balloc.c
Quoted 13 lines
Signed-off-by Cyrill Gorcunov <[email protected]>---
balloc.c | 6 +++++- super.c | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-)balloc.c +0
-0
Please always use `patch -p1' form from the top-level directory. This should have been
--- a/fs/udf/balloc.c
+++ b/fs/udf/balloc.c
balloc.c static int udf_table_new_block(struct super_block * sb, · line 751
Quoted 10 lines
balloc.c +5
-1@@ -744,7 +744,11 @@ static int udf_table_new_block(struct super_block * sb,uint32_t spread =0xFFFFFFFF , nspread =0xFFFFFFFF ;uint32_t newblock =0 , adsize;uint32_t elen, goal_elen =0 ; -kernel_lb_addr eloc, goal_eloc; +kernel_lb_addr eloc; +kernel_lb_addr goal_eloc = { + .logicalBlockNum =0 , + .partitionReferenceNum =0 , + };
kernel_lb_addr goal_eloc = { };is equivalent and sufficient.
Quoted 18 lines
A few variables could be used without being explicitly initialized. Fixed.
Signed-off-by Cyrill Gorcunov <[email protected]>---
balloc.c | 6 +++++- super.c | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-)balloc.c +0
-0@@ -744,7 +744,11 @@ static int udf_table_new_block(struct super_block * sb,uint32_t spread =0xFFFFFFFF , nspread =0xFFFFFFFF ;
balloc.c static int udf_table_new_block(struct super_block * sb, · line 753
Quoted 10 lines
balloc.c +5
-1uint32_t newblock =0 , adsize;uint32_t elen, goal_elen =0 ; -kernel_lb_addr eloc, goal_eloc; +kernel_lb_addr eloc; +kernel_lb_addr goal_eloc = { + .logicalBlockNum =0 , + .partitionReferenceNum =0 , + };struct extent_position epos, goal_epos;int8_t etype;
As I read the code, I don't think it can happen goal_eloc is used
unitialized. Also please diff the tree completely, not just the udf directory..
Quoted 6 lines
super.c +0
-0@@ -1358,7 +1358,10 @@ udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset)case UDF_VIRTUAL_MAP15 :
super.c udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset) · line 1367
Quoted 10 lines
super.c +4
-1case UDF_VIRTUAL_MAP20 : { -kernel_lb_addr ino; +kernel_lb_addr ino = { + .logicalBlockNum =0 , + .partitionReferenceNum =0 , + };if (!UDF_SB_LASTBLOCK (sb)) {
This one seems correct. Thanks for fixing this.
Honza
Signature · 2 lines
Jan Kara <[email protected]> SuSE CR Labs
[Jan Kara - Tue, May 22, 2007 at 10:29:38PM +0200]
| > A few variables could be used without being explicitly initialized. | > Fixed. | > | > Signed-off-by: Cyrill Gorcunov <[email protected]> | > --- | > | > | > balloc.c | 6 +++++- | > super.c | 5 ++++- | > 2 files changed, 9 insertions(+), 2 deletions(-) | > | > | > diff --git a/balloc.c b/balloc.c | > index 4cec910..be37393 100644 | > --- a/balloc.c | > +++ b/balloc.c | > @@ -744,7 +744,11 @@ static int udf_table_new_block(struct super_block * sb, | > uint32_t spread = 0xFFFFFFFF, nspread = 0xFFFFFFFF; | > uint32_t newblock = 0, adsize; | > uint32_t elen, goal_elen = 0; | > - kernel_lb_addr eloc, goal_eloc; | > + kernel_lb_addr eloc; | > + kernel_lb_addr goal_eloc = { | > + .logicalBlockNum = 0, | > + .partitionReferenceNum = 0, | > + }; | > struct extent_position epos, goal_epos; | > int8_t etype; | As I read the code, I don't think it can happen goal_eloc is used | unitialized. Also please diff the tree completely, not just the udf | directory.. | | > diff --git a/super.c b/super.c | > index 9b8644a..068a99c 100644 | > --- a/super.c | > +++ b/super.c | > @@ -1358,7 +1358,10 @@ udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset) | > case UDF_VIRTUAL_MAP15: | > case UDF_VIRTUAL_MAP20: | > { | > - kernel_lb_addr ino; | > + kernel_lb_addr ino = { | > + .logicalBlockNum = 0, | > + .partitionReferenceNum = 0, | > + }; | > | > if (!UDF_SB_LASTBLOCK(sb)) | > { | This one seems correct. Thanks for fixing this. | | Honza | -- | Jan Kara <[email protected]> | SuSE CR Labs |
Sorry, that's my fault :(
Cyrill
[Jan Kara - Tue, May 22, 2007 at 10:29:38PM +0200]
| > A few variables could be used without being explicitly initialized. | > Fixed. | > | > Signed-off-by: Cyrill Gorcunov <[email protected]> | > --- | > | > | > balloc.c | 6 +++++- | > super.c | 5 ++++- | > 2 files changed, 9 insertions(+), 2 deletions(-) | > | > | > diff --git a/balloc.c b/balloc.c | > index 4cec910..be37393 100644 | > --- a/balloc.c | > +++ b/balloc.c | > @@ -744,7 +744,11 @@ static int udf_table_new_block(struct super_block * sb, | > uint32_t spread = 0xFFFFFFFF, nspread = 0xFFFFFFFF; | > uint32_t newblock = 0, adsize; | > uint32_t elen, goal_elen = 0; | > - kernel_lb_addr eloc, goal_eloc; | > + kernel_lb_addr eloc; | > + kernel_lb_addr goal_eloc = { | > + .logicalBlockNum = 0, | > + .partitionReferenceNum = 0, | > + }; | > struct extent_position epos, goal_epos; | > int8_t etype; | As I read the code, I don't think it can happen goal_eloc is used | unitialized. Also please diff the tree completely, not just the udf | directory.. | | > diff --git a/super.c b/super.c | > index 9b8644a..068a99c 100644 | > --- a/super.c | > +++ b/super.c | > @@ -1358,7 +1358,10 @@ udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset) | > case UDF_VIRTUAL_MAP15: | > case UDF_VIRTUAL_MAP20: | > { | > - kernel_lb_addr ino; | > + kernel_lb_addr ino = { | > + .logicalBlockNum = 0, | > + .partitionReferenceNum = 0, | > + }; | > | > if (!UDF_SB_LASTBLOCK(sb)) | > { | This one seems correct. Thanks for fixing this. | | Honza | -- | Jan Kara <[email protected]> | SuSE CR Labs |
Jan, you know I've been messed up. The variables I've touched in my patch became initialized in any case.
Andrew, just drop my patch (you're right and I was wrong ;).
Thanks you both for comments.
Cyrill