mini_fo: add error pointer checks after dentry lookups to fix various crash bugs...
authorFelix Fietkau <nbd@openwrt.org>
Sun, 4 Jul 2010 15:28:41 +0000 (15:28 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 4 Jul 2010 15:28:41 +0000 (15:28 +0000)
SVN-Revision: 22057

target/linux/generic/patches-2.6.32/217-mini_fo_dentry_check.patch [new file with mode: 0644]
target/linux/generic/patches-2.6.33/217-mini_fo_dentry_check.patch [new file with mode: 0644]
target/linux/generic/patches-2.6.34/217-mini_fo_dentry_check.patch [new file with mode: 0644]
target/linux/generic/patches-2.6.35/218-mini_fo_dentry_check.patch [new file with mode: 0644]

diff --git a/target/linux/generic/patches-2.6.32/217-mini_fo_dentry_check.patch b/target/linux/generic/patches-2.6.32/217-mini_fo_dentry_check.patch
new file mode 100644 (file)
index 0000000..cf53e48
--- /dev/null
@@ -0,0 +1,48 @@
+--- a/fs/mini_fo/meta.c
++++ b/fs/mini_fo/meta.c
+@@ -48,6 +48,9 @@ int meta_build_lists(dentry_t *dentry)
+                                            dtohd2(dentry),
+                                            strlen(META_FILENAME));
+               mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++              if (IS_ERR(meta_dentry))
++                      goto out_ok;
++
+               if(!meta_dentry->d_inode) {
+                       dput(meta_dentry);
+                       goto out_ok;
+@@ -433,6 +436,8 @@ int meta_write_d_entry(dentry_t *dentry,
+       meta_dentry = lookup_one_len(META_FILENAME,
+                                    dtohd2(dentry), strlen (META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+       /* We need to create a META-file */
+         if(!meta_dentry->d_inode) {
+@@ -538,6 +543,8 @@ int meta_write_r_entry(dentry_t *dentry,
+                                    dtohd2(dentry),
+                                    strlen (META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
+@@ -656,6 +663,8 @@ int meta_sync_d_list(dentry_t *dentry, i
+                                    dtohd2(dentry),
+                                    strlen(META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
+@@ -803,6 +812,8 @@ int meta_sync_r_list(dentry_t *dentry, i
+                                    dtohd2(dentry),
+                                    strlen(META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
diff --git a/target/linux/generic/patches-2.6.33/217-mini_fo_dentry_check.patch b/target/linux/generic/patches-2.6.33/217-mini_fo_dentry_check.patch
new file mode 100644 (file)
index 0000000..cf53e48
--- /dev/null
@@ -0,0 +1,48 @@
+--- a/fs/mini_fo/meta.c
++++ b/fs/mini_fo/meta.c
+@@ -48,6 +48,9 @@ int meta_build_lists(dentry_t *dentry)
+                                            dtohd2(dentry),
+                                            strlen(META_FILENAME));
+               mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++              if (IS_ERR(meta_dentry))
++                      goto out_ok;
++
+               if(!meta_dentry->d_inode) {
+                       dput(meta_dentry);
+                       goto out_ok;
+@@ -433,6 +436,8 @@ int meta_write_d_entry(dentry_t *dentry,
+       meta_dentry = lookup_one_len(META_FILENAME,
+                                    dtohd2(dentry), strlen (META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+       /* We need to create a META-file */
+         if(!meta_dentry->d_inode) {
+@@ -538,6 +543,8 @@ int meta_write_r_entry(dentry_t *dentry,
+                                    dtohd2(dentry),
+                                    strlen (META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
+@@ -656,6 +663,8 @@ int meta_sync_d_list(dentry_t *dentry, i
+                                    dtohd2(dentry),
+                                    strlen(META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
+@@ -803,6 +812,8 @@ int meta_sync_r_list(dentry_t *dentry, i
+                                    dtohd2(dentry),
+                                    strlen(META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
diff --git a/target/linux/generic/patches-2.6.34/217-mini_fo_dentry_check.patch b/target/linux/generic/patches-2.6.34/217-mini_fo_dentry_check.patch
new file mode 100644 (file)
index 0000000..cf53e48
--- /dev/null
@@ -0,0 +1,48 @@
+--- a/fs/mini_fo/meta.c
++++ b/fs/mini_fo/meta.c
+@@ -48,6 +48,9 @@ int meta_build_lists(dentry_t *dentry)
+                                            dtohd2(dentry),
+                                            strlen(META_FILENAME));
+               mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++              if (IS_ERR(meta_dentry))
++                      goto out_ok;
++
+               if(!meta_dentry->d_inode) {
+                       dput(meta_dentry);
+                       goto out_ok;
+@@ -433,6 +436,8 @@ int meta_write_d_entry(dentry_t *dentry,
+       meta_dentry = lookup_one_len(META_FILENAME,
+                                    dtohd2(dentry), strlen (META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+       /* We need to create a META-file */
+         if(!meta_dentry->d_inode) {
+@@ -538,6 +543,8 @@ int meta_write_r_entry(dentry_t *dentry,
+                                    dtohd2(dentry),
+                                    strlen (META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
+@@ -656,6 +663,8 @@ int meta_sync_d_list(dentry_t *dentry, i
+                                    dtohd2(dentry),
+                                    strlen(META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
+@@ -803,6 +812,8 @@ int meta_sync_r_list(dentry_t *dentry, i
+                                    dtohd2(dentry),
+                                    strlen(META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
diff --git a/target/linux/generic/patches-2.6.35/218-mini_fo_dentry_check.patch b/target/linux/generic/patches-2.6.35/218-mini_fo_dentry_check.patch
new file mode 100644 (file)
index 0000000..cf53e48
--- /dev/null
@@ -0,0 +1,48 @@
+--- a/fs/mini_fo/meta.c
++++ b/fs/mini_fo/meta.c
+@@ -48,6 +48,9 @@ int meta_build_lists(dentry_t *dentry)
+                                            dtohd2(dentry),
+                                            strlen(META_FILENAME));
+               mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++              if (IS_ERR(meta_dentry))
++                      goto out_ok;
++
+               if(!meta_dentry->d_inode) {
+                       dput(meta_dentry);
+                       goto out_ok;
+@@ -433,6 +436,8 @@ int meta_write_d_entry(dentry_t *dentry,
+       meta_dentry = lookup_one_len(META_FILENAME,
+                                    dtohd2(dentry), strlen (META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+       /* We need to create a META-file */
+         if(!meta_dentry->d_inode) {
+@@ -538,6 +543,8 @@ int meta_write_r_entry(dentry_t *dentry,
+                                    dtohd2(dentry),
+                                    strlen (META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
+@@ -656,6 +663,8 @@ int meta_sync_d_list(dentry_t *dentry, i
+                                    dtohd2(dentry),
+                                    strlen(META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */
+@@ -803,6 +812,8 @@ int meta_sync_r_list(dentry_t *dentry, i
+                                    dtohd2(dentry),
+                                    strlen(META_FILENAME));
+       mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
++      if (IS_ERR(meta_dentry))
++              return PTR_ERR(meta_dentry);
+         if(!meta_dentry->d_inode) {
+                 /* We need to create a META-file */