diff options
author | Chunrong Guo <B40290@freescale.com> | 2013-08-15 17:59:55 +0800 |
---|---|---|
committer | Saul Wold <sgw@linux.intel.com> | 2013-08-20 07:11:44 -0700 |
commit | d98f08a7ad95d0b17846276b028a6614f16b6846 (patch) | |
tree | ced2c1cb94c4246327fa7b93124fc893a96050d3 | |
parent | 0ec3710b8dcae311e8d9d676d5f1c6843a81383b (diff) | |
download | openembedded-core-d98f08a7ad95d0b17846276b028a6614f16b6846.tar.gz openembedded-core-d98f08a7ad95d0b17846276b028a6614f16b6846.tar.bz2 openembedded-core-d98f08a7ad95d0b17846276b028a6614f16b6846.zip |
genext2fs: fix memory corruption on powerpc
* fix memory corruption errors on powerpc64
e.g.
|$ genext2fs -b 30000 -d . -i 8192 /tmp/tstrootfs
| Segmentation fault
Signed-off-by: Chunrong Guo <B40290@freescale.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
-rw-r--r-- | meta/recipes-devtools/genext2fs/genext2fs-1.4.1/fix-memory-corruption-on-powerpc.patch | 76 | ||||
-rw-r--r-- | meta/recipes-devtools/genext2fs/genext2fs_1.4.1.bb | 3 |
2 files changed, 78 insertions, 1 deletions
diff --git a/meta/recipes-devtools/genext2fs/genext2fs-1.4.1/fix-memory-corruption-on-powerpc.patch b/meta/recipes-devtools/genext2fs/genext2fs-1.4.1/fix-memory-corruption-on-powerpc.patch new file mode 100644 index 0000000000..0ef162c023 --- /dev/null +++ b/meta/recipes-devtools/genext2fs/genext2fs-1.4.1/fix-memory-corruption-on-powerpc.patch @@ -0,0 +1,76 @@ +Upstream-Status: Submitted + +fix memory corruption on powerpc + +Signed-off-by: Wrobel Heinz <Heinz.Wrobel@freescale.com> + +diff --unified a/genext2fs.c b/genext2fs.c +--- a/genext2fs.c 2013-08-14 16:50:59.061623605 +0200 ++++ b/genext2fs.c 2013-08-14 16:47:23.349623674 +0200 +@@ -675,21 +675,34 @@ + } + + static void +-swap_nod(inode *nod) ++swap_nod(inode *nod, int fromdisk) + { + uint32 nblk; ++ uint32 i_blocks = nod->i_blocks; ++ uint32 i_size = nod->i_size; ++ uint16 i_mode = nod->i_mode; ++ + + #define this nod + inode_decl + #undef this + ++ if (fromdisk) { ++ // Only now do we have the values in the correct ++ // endianess for the host. So we override the ++ // earlier assumption ++ i_blocks = nod->i_blocks; ++ i_size = nod->i_size; ++ i_mode = nod->i_mode; ++ } ++ + // block and character inodes store the major and minor in the + // i_block, so we need to unswap to get those. Also, if it's + // zero iblocks, put the data back like it belongs. +- nblk = nod->i_blocks / INOBLK; +- if ((nod->i_size && !nblk) +- || ((nod->i_mode & FM_IFBLK) == FM_IFBLK) +- || ((nod->i_mode & FM_IFCHR) == FM_IFCHR)) ++ nblk = i_blocks / INOBLK; ++ if ((i_size && !nblk) ++ || ((i_mode & FM_IFBLK) == FM_IFBLK) ++ || ((i_mode & FM_IFCHR) == FM_IFCHR)) + { + int i; + for(i = 0; i <= EXT2_TIND_BLOCK; i++) +@@ -1066,7 +1079,7 @@ + nod_info *ni = container_of(elem, nod_info, link); + + if (ni->fs->swapit) +- swap_nod(ni->itab); ++ swap_nod(ni->itab, 0); + put_blk(ni->bi); + free(ni); + } +@@ -1102,7 +1115,7 @@ + ni->b = get_blk(fs, fs->gd[grp].bg_inode_table + boffset, &ni->bi); + ni->itab = ((inode *) ni->b) + offset; + if (fs->swapit) +- swap_nod(ni->itab); ++ swap_nod(ni->itab, 1); + + out: + *rni = ni; +@@ -1158,6 +1171,8 @@ + if (dw->fs->swapit) + swap_dir(&dw->d); + memcpy(dw->last_d, &dw->d, sizeof(directory)); ++ if (dw->fs->swapit) ++ swap_dir(&dw->d); + + if (((int8 *) next_d) >= ((int8 *) dw->b + BLOCKSIZE)) + return NULL; diff --git a/meta/recipes-devtools/genext2fs/genext2fs_1.4.1.bb b/meta/recipes-devtools/genext2fs/genext2fs_1.4.1.bb index 702245ff75..60fd0c223d 100644 --- a/meta/recipes-devtools/genext2fs/genext2fs_1.4.1.bb +++ b/meta/recipes-devtools/genext2fs/genext2fs_1.4.1.bb @@ -22,7 +22,8 @@ SRC_URI += "file://update_to_1.95.patch \ file://0017-Fix-file-same-comparison.patch \ file://0018-Handle-files-changing-while-we-are-working.patch \ file://0019-Make-sure-superblock-is-clear-on-allocation.patch \ - file://fix-nbblocks-cast.patch" + file://fix-nbblocks-cast.patch \ + file://fix-memory-corruption-on-powerpc.patch " SRC_URI[md5sum] = "b7b6361bcce2cedff1ae437fadafe53b" SRC_URI[sha256sum] = "404dbbfa7a86a6c3de8225c8da254d026b17fd288e05cec4df2cc7e1f4feecfc" |