[PATCH] bug fix to fs/super.c for 2.0.3x and probably 2.2.x

Philip Gladstone (philip@raptor.com)
Tue, 16 Mar 1999 17:07:39 -0500


This is a cryptographically signed message in MIME format.

--------------ms0EF9413378F479637122C6CD
Content-Type: multipart/mixed;
boundary="------------DC1FF29DCC6E490C025379CC"

This is a multi-part message in MIME format.
--------------DC1FF29DCC6E490C025379CC
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I finally tracked this one down (after several weeks). The history
is that a custom version of the redhat install wouldn't mount
NFS disks, but it would always work when debugging code was included.

After some looking at the kernel, it turned out that when the mount
of the install filesystem is done, the nfs_mount_options control
block is aligned near the end of a page.

The code in the kernel to copy the mount options into kernel space
guesses the length of the mount options as

MIN(PAGE_SIZE-1, distance to end of VMA)

I have no idea why the VMA boundary falls in the middle of my mount
options (static data), but it does.

Fixing the copy_mount_options to take this case into account makes
install work again.

Patch attached for 2.0.36, but I would expect it to apply to 2.0.37
and higher.

The code is the same in 2.0.36 and in recent 2.1 (so I guess it is
unchanged in 2.2).

Philip

-- 
Philip Gladstone                           +1 781 530 2461
Axent Technologies, Waltham, MA
--------------DC1FF29DCC6E490C025379CC
Content-Type: text/plain; charset=us-ascii;
 name="super.pf"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="super.pf"

--- linux-old/fs/super.c Sun Nov 15 13:33:15 1998 +++ linux/fs/super.c Tue Mar 16 16:53:00 1999 @@ -807,9 +807,20 @@ i = vma->vm_end - (unsigned long) data; if (PAGE_SIZE <= (unsigned long) i) i = PAGE_SIZE-1; + else { + /* Rather short, maybe the next vma butts up against this one ... */ + vma = find_vma(current->mm, i + (unsigned long) data); + if (vma && i + (unsigned long) data >= vma->vm_start && + (vma->vm_flags & VM_READ)) { + /* It does butt up, and we can read the next memory ... */ + i = vma->vm_end - (unsigned long) data; + if (PAGE_SIZE <= (unsigned long) i) + i = PAGE_SIZE-1; + } + } if (!(page = __get_free_page(GFP_KERNEL))) { return -ENOMEM; } memcpy_fromfs((void *) page,data,i); *where = page; return 0;

--------------DC1FF29DCC6E490C025379CC--

--------------ms0EF9413378F479637122C6CD Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature

MIIIcQYJKoZIhvcNAQcCoIIIYjCCCF4CAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC BicwggLXMIICQKADAgECAgIwtDANBgkqhkiG9w0BAQQFADCByDELMAkGA1UEBhMCWkExFTAT BgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxGjAYBgNVBAoTEVRo YXd0ZSBDb25zdWx0aW5nMTMwMQYDVQQLEypDZXJ0aWZpY2F0ZSBTZXJ2aWNlcyBSU0EgSUsg MTk5OC4yLjI1IDg6MzUxOzA5BgNVBAMTMlRoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBSU0Eg SXNzdWluZyBLZXkgMTk5OC4yLjI1MB4XDTk4MDgxMjE0NDIyOVoXDTk5MDgxMjE0NDIyOVow QzEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEgMB4GCSqGSIb3DQEJARYRcGhp bGlwQHJhcHRvci5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAONqzM373SGsMZ5C X1WU1vOr8pZFVRBVJC/WEfc5sR+Q4YAjRk5F4Yww6cHAXtTiptaSWcgK+dli46/5Sy60UX2s iVcl8i6pmcQ/m+kFodrJ1GjZd9SU2+IMnY7liBP2sdwAB02G9EX2B43nAh9/Y2Xl4T8uGV3L oz6CwP5YmUV1AgMBAAGjVDBSMBEGCWCGSAGG+EIBAQQEAwIFoDAOBgNVHQ8BAf8EBAMCBaAw DAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBTtNBduDiteS4eYkbg3p5i/kh+scjANBgkqhkiG 9w0BAQQFAAOBgQBZPzaRk5KnLZCwvJy/y/OaSAfGp1h/c8agEBoLclt3CSytNnT3FVZLq5w/ R0O9wIu8er/eivXt1CvWs/wYpqZpszhmbaIreRZHY9A93G/Zavv7yyMBpK5OVYpkAMUt4rAc 7/twlNMo/493FEBSAiYjdbhIqGOyBikq/R3iyFiyUjCCA0gwggKxoAMCAQICAQgwDQYJKoZI hvcNAQEEBQAwgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNV BAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0Nl cnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25h bCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3Rl LmNvbTAeFw05ODAyMjUwODM1MzNaFw0wMDAyMjUwODM1MzNaMIHIMQswCQYDVQQGEwJaQTEV MBMGA1UECBMMV2VzdGVybiBDYXBlMRQwEgYDVQQHEwtEdXJiYW52aWxsZTEaMBgGA1UEChMR VGhhd3RlIENvbnN1bHRpbmcxMzAxBgNVBAsTKkNlcnRpZmljYXRlIFNlcnZpY2VzIFJTQSBJ SyAxOTk4LjIuMjUgODozNTE7MDkGA1UEAxMyVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIFJT QSBJc3N1aW5nIEtleSAxOTk4LjIuMjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMcx w8QbmSNy0lGFlUzjWZLk6GyBtfQbXwnmxK2zRG+qONdX5LDFy7p0rkxhIyR2BvjZXQ2KKLK0 K+0Nu1Ik9LfFSaeDY/wKBLDvgSj35pHGTZfuknYmYshjN3Y8sZIP3K1SBopxxTcxaobbvQhp KFn87cd9JmfdTd7TxQL+d7bhAgMBAAGjNzA1MBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0j BBgwFqAUcknCczTGVfQLdnKBfnf0h+fGsg4wDQYJKoZIhvcNAQEEBQADgYEAQurti2F+odRc Uqk8vZ6ceegJixKBrY8dWkbt8SUmW8iu/XohFs2gHjuXM4P7TjcqKJemSPUoGAIkfIB7U1C1 +2+a/G2qXCZFqC82IljTGwIDH+6UOfD+NFqISxs9jPPXftOfcFt29tjE4rY8JJ0JJYxZsdSL 8/wEgg6eKYZsxf8xggISMIICDgIBATCBzzCByDELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdl c3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxGjAYBgNVBAoTEVRoYXd0ZSBDb25z dWx0aW5nMTMwMQYDVQQLEypDZXJ0aWZpY2F0ZSBTZXJ2aWNlcyBSU0EgSUsgMTk5OC4yLjI1 IDg6MzUxOzA5BgNVBAMTMlRoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBSU0EgSXNzdWluZyBL ZXkgMTk5OC4yLjI1AgIwtDAJBgUrDgMCGgUAoIGZMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0B BwEwHAYJKoZIhvcNAQkFMQ8XDTk5MDMxNjIyMDc0MVowIwYJKoZIhvcNAQkEMRYEFEnBi12g 3/TC6HIAYFvc979otbR4MDoGCSqGSIb3DQEJDzEtMCswCgYIKoZIhvcNAwcwDgYIKoZIhvcN AwICAgCAMA0GCCqGSIb3DQMCAgFAMA0GCSqGSIb3DQEBAQUABIGAOY7DT68wqfRFVpRdgQ1T PWRLj8B/kkqmJVd3D1GLtfKxdLIDF+3BI8DJWt1L2bjxSCebSEZ1G9Pt/r+0S7YKtNpHgmPQ M6kdkvUCPiWLhxLJphxxCuLIg8AgKlwwxymIM80vC3uMyQk7xeMnRPBSL7lbC6vcwFFvBj6x k1Q7S7E= --------------ms0EF9413378F479637122C6CD--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/