|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
[just for fun] loop.ko: supporto per le partizioni
Patch per il kernel 2.6.8.
Codice:
--- linux-2.6.8.1/drivers/block/loop.c.org 2004-12-13 13:00:50.000000000 +0100 +++ linux-2.6.8.1/drivers/block/loop.c 2004-12-14 09:36:02.799210096 +0100 @@ -67,9 +67,12 @@ #include <linux/writeback.h> #include <linux/buffer_head.h> /* for invalidate_bdev() */ #include <linux/completion.h> +#include <linux/hdreg.h> #include <asm/uaccess.h> +#define MAX_LO_PART 16 + static int max_loop = 8; static struct loop_device *loop_dev; static struct gendisk **disks; @@ -1010,7 +1013,10 @@ { struct loop_device *lo = inode->i_bdev->bd_disk->private_data; int err; + int repart = 0; + if(MINOR(inode->i_rdev)%MAX_LO_PART) + return -EINVAL; down(&lo->lo_ctl_mutex); switch (cmd) { case LOOP_SET_FD: @@ -1024,19 +1030,31 @@ break; case LOOP_SET_STATUS: err = loop_set_status_old(lo, (struct loop_info __user *) arg); + if(!err) repart = 1; break; case LOOP_GET_STATUS: err = loop_get_status_old(lo, (struct loop_info __user *) arg); break; case LOOP_SET_STATUS64: err = loop_set_status64(lo, (struct loop_info64 __user *) arg); + if(!err) repart = 1; break; case LOOP_GET_STATUS64: err = loop_get_status64(lo, (struct loop_info64 __user *) arg); break; + case HDIO_GETGEO: + err = lo->lo_backing_file ? lo->lo_backing_file->f_op->ioctl( + lo->lo_backing_file->f_mapping->host, + lo->lo_backing_file, cmd, arg) + : -EINVAL; + break; default: err = lo->ioctl ? lo->ioctl(lo, cmd, arg) : -EINVAL; + if(err==-EINVAL) + printk("loop: Unknown ioctl %x\n", (unsigned) cmd); } + if(repart) + file->f_op->ioctl(inode, file, BLKRRPART, 0); up(&lo->lo_ctl_mutex); return err; } @@ -1137,7 +1155,7 @@ goto out_mem2; for (i = 0; i < max_loop; i++) { - disks[i] = alloc_disk(1); + disks[i] = alloc_disk(MAX_LO_PART); if (!disks[i]) goto out_mem3; } @@ -1158,7 +1176,7 @@ lo->lo_number = i; spin_lock_init(&lo->lo_lock); disk->major = LOOP_MAJOR; - disk->first_minor = i; + disk->first_minor = i*MAX_LO_PART; disk->fops = &lo_fops; sprintf(disk->disk_name, "loop%d", i); sprintf(disk->devfs_name, "loop/%d", i); - Con devfs: i file /dev/loop/X (X=1, 2...) sono ora _directory_ (quindi eventuali script di avvio che utilizzano il loopback non funzioneranno). Dentro queste directory ci saranno i file disc, part1, part2... Occorre usare /dev/loop/X/disc per effettuare il losetup, le partizioni verranno rilevate automaticamente. - Con udev: verranno creati i file partizione aggiuntivi /dev/loopXpY - fdisk e il benedetto CHS: se mettete in loopback un dispositivo a blocchi (ad es. fd0), verrà chiesto a questo dispositivo informazioni sulla geometria; altrimenti, fdisk dovrà fare le proprie assunzioni. Se si parte da un file pieno di zeri in loopback, i valori di default sono H=255 S=63 (C è calcolato in base alla capacità). Se si parte da un file immagine di un disco o floppy esistente, fdisk dovrebbe essere in grado di dedurli dalle partizioni presenti. Se create un file vuoto da utilizzare come immagine di un floppy, impostare H=2 S=18 C=80. Non utilizzatelo su dati importanti; il disco con Windows va bene ![]() Personalmente ho fatto questa modifica per accedere più facilmente alle immagini di qemu. -- enjoy
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
Non ho capito bene...
adesso posso montare in loop una partizione (supponiamo io mi faccia un dd di hda1, poi quel file lo posso montare in loop...) con questa patch posso montare un intero disco? (cioe' mi faccio un dd di tutto hda e posso montarlo in loop? e lui mi crea i device di ogni partizione come /dev/loop0p1 /dev/loop0p2 ecc?.?) Ciao!
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Esattamente, con questa patch puoi ad es. partizionare il...floppy, oppure mettere in losetup l'immagine di un hd (non ho provato su un dispositivo hd fisico, ma non vedo perché non dovrebbe funzionare -- se hai un disco sacrificabile, fai una prova) e accedere alle partizioni ivi contenute (cosa impossibile con l'attuale loop.ko). Insomma, consente di partizionare e gestire le partizioni di qualsiasi cosa ci attacchi, quindi se fai un losetup su una partizione, volendo puoi...partizionare la partizione
![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
Quote:
![]()
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Azz nessun altro interessato?
Non ci sono più gli hacker di una volta... ![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
Lo farei , ma al momento non ho neanche un byte sacrificabile
![]()
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
Quote:
![]()
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ |
|
![]() |
![]() |
![]() |
#9 |
Registered User
Iscritto dal: Nov 2000
Messaggi: 9315
|
io di hd ne ho a gogò.. peccato non aver assolutamente capito come funziona il tutto
![]() ![]() viva l'igonranza! ![]() ciaoooooooooo |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:35.