Hi All! I think I've spotted a bug in the initialisation procedure in the loop driver, @line 1027-1060, when there is allocation failure: ----BEGIN CODE---- loop_dev = kmalloc(max_loop * sizeof(struct loop_device), GFP_KERNEL); if (!loop_dev) return -ENOMEM; loop_sizes = kmalloc(max_loop * sizeof(int), GFP_KERNEL); if (!loop_sizes) goto out_sizes; loop_blksizes = kmalloc(max_loop * sizeof(int), GFP_KERNEL); if (!loop_blksizes) goto out_blksizes; [...SNIP...] out_sizes: kfree(loop_dev); out_blksizes: kfree(loop_sizes); ----END CODE---- Two problems arise there: 1) Should allocation of loop_sizes fail, we'll try to free loop_sizes that was NOT allocated (no problem because kfree does not free a NULL pointer). But not very clean... 2) Should allocation of loop_blksizes fail, loop_dev will NOT be freed. That one looks more problematic. Am I wrong? Have I missed something? Anyway it's been there for ages, I suppose. Patch is very straigthforward, and is attached : swap the last 2 pairs of lines, so that out_blksizes is before out_sizes, and kfree(loop_sizes is before kfree(loop_dev). Please CC: answers and comments as I'm no longer subscribed. Cheers, Yann. -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | 0 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | --==< °_° >==-- °---.----------------: X AGAINST | \e/ There is no | | web: ymorin.free.fr | SETI@home 433 | / \ HTML MAIL | v conspiracy. | °---------------------°----------------°------------------°--------------------°