X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=init%2Finitramfs.c;h=f81cfa40a719858a003ab50448f3d0925005d5ff;hb=eaa8568901b3164197ce727c4c9b4067383e526c;hp=77b934cccefe5526bff1a8234e8dd2fd6cd85dff;hpb=2e1ca21d46aaef95101723fa402f39d3a95aba59;p=powerpc.git diff --git a/init/initramfs.c b/init/initramfs.c index 77b934ccce..f81cfa40a7 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -26,10 +26,12 @@ static void __init free(void *where) /* link hash */ +#define N_ALIGN(len) ((((len) + 1) & ~3) + 2) + static __initdata struct hash { int ino, minor, major; struct hash *next; - char *name; + char name[N_ALIGN(PATH_MAX)]; } *head[32]; static inline int hash(int major, int minor, int ino) @@ -57,7 +59,7 @@ static char __init *find_link(int major, int minor, int ino, char *name) q->ino = ino; q->minor = minor; q->major = major; - q->name = name; + strcpy(q->name, name); q->next = NULL; *p = q; return NULL; @@ -133,8 +135,6 @@ static inline void eat(unsigned n) count -= n; } -#define N_ALIGN(len) ((((len) + 1) & ~3) + 2) - static __initdata char *collected; static __initdata int remains; static __initdata char *collect; @@ -519,7 +519,7 @@ void __init populate_rootfs(void) return; } printk("it isn't (%s); looks like an initrd\n", err); - fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 700); + fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 0700); if (fd >= 0) { sys_write(fd, (char *)initrd_start, initrd_end - initrd_start);