diff -u lilo-22.5.9/boot.c lilo-new/boot.c
--- lilo-22.5.9/boot.c	2003-11-25 00:31:24.000000000 -0500
+++ lilo-new/boot.c	2004-12-09 00:34:31.000000000 -0500
@@ -74,6 +74,8 @@
 	printf("Setup length is %d sector%s.\n",setup,setup == 1 ? "" : "s");
     if (setup > MAX_SETUPSECS)
 	die("Setup length exceeds %d maximum; kernel setup will overwrite boot loader", MAX_SETUPSECS);
+    initrd=cfg_get_strg(cf_kernel,"length");
+    if(initrd) st.st_size=to_number(initrd);
     map_add(&geo,0,(st.st_size+SECTOR_SIZE-1)/SECTOR_SIZE);
     sectors = map_end_section(&descr->start,setup+SPECIAL_SECTORS+SPECIAL_BOOTSECT);
     if (!modern_kernel || !(hdr.flags & LFLAG_HIGH))
diff -u lilo-22.5.9/cfg.c lilo-new/cfg.c
--- lilo-22.5.9/cfg.c	2003-11-25 14:03:29.000000000 -0500
+++ lilo-new/cfg.c	2004-12-09 00:27:24.000000000 -0500
@@ -143,6 +143,7 @@
   { cft_flag, "read-write",	NULL,		NULL,NULL },
   { cft_strg, "root",		NULL,		NULL,NULL },
   { cft_strg, "vga",		NULL,		NULL,NULL },
+  { cft_strg, "length",		NULL,		NULL,NULL },
   { cft_link, NULL,		&cf_all,	NULL,NULL }};
 
 CONFIG cf_image[] = {
