[klibc] [PATCH] fix root on nfs

Olaf Hering olh at suse.de
Mon May 24 21:06:24 PDT 2004


this patch fixes root on nfs for me.
The struct is not initialized correctly, the option for bind is wrong.
And the pad_len algorithm looks a bit odd:

int main(void)
{
        int i;
        for (i = 0; i < 42; i++) {
                printf("%d %d %d\n", i, (i + 3) & ~3,
                       (i % 8) ? (i & 7) + 8 : i);
        }
        return 0;
}

1 4 9
2 4 10
3 4 11
4 4 12
5 8 13
6 8 14
7 8 15
8 8 8
9 12 9
10 12 10
11 12 11
12 12 12
13 16 13
14 16 14
15 16 15
16 16 16
17 20 9
18 20 10
19 20 11
20 20 12
21 24 13
22 24 14
23 24 15
24 24 24
25 28 9
26 28 10


diff -p -ppurN klibc-0.116/klibc/inet/bindresvport.c klibc-0.116.nfsmount/klibc/inet/bindresvport.c
--- klibc-0.116/klibc/inet/bindresvport.c	2003-12-08 02:33:24.000000000 +0100
+++ klibc-0.116.nfsmount/klibc/inet/bindresvport.c	2004-05-24 20:01:50.000000000 +0200
@@ -23,7 +23,7 @@ int bindresvport(int sd, struct sockaddr
 	if (sin == NULL) {
 		sin = &me;
 		memset(sin, 0, sizeof(me));
-		sin->sin_port = AF_INET;
+		sin->sin_family = AF_INET;
 	}
 	else if (sin->sin_family != AF_INET) {
 		errno = EPFNOSUPPORT;
@@ -37,7 +37,7 @@ int bindresvport(int sd, struct sockaddr
 	
 	for (i = 0; i < NUM_PORTS; i++, port++) {
 		sin->sin_port = htons(port);
-		if ((ret = bind(sd, (struct sockaddr *)&sin, sizeof(*sin))) != -1)
+		if ((ret = bind(sd, (struct sockaddr *)sin, sizeof(*sin))) != -1)
 			break;
 		if (port == END_PORT)
 			port = START_PORT;
diff -p -ppurN klibc-0.116/nfsmount/mount.c klibc-0.116.nfsmount/nfsmount/mount.c
--- klibc-0.116/nfsmount/mount.c	2003-05-06 00:15:09.000000000 +0200
+++ klibc-0.116.nfsmount/nfsmount/mount.c	2004-05-24 18:52:35.000000000 +0200
@@ -77,9 +77,7 @@ static void get_ports(__u32 server, cons
 
 static inline int pad_len(int len)
 {
-	if (len % 8)
-		return (len & 7) + 8;
-	return len;
+	return (len + 3) & ~3;
 }
 
 static inline void dump_params(__u32 server,


-- 
USB is for mice, FireWire is for men!

sUse lINUX ag, nÜRNBERG



More information about the klibc mailing list