Today GeoHot has released sample PS3 Linux isolated SPU loader code for those with OtherOS to experiment with.
To quote: "Right now, I'm playing with the isolated SPEs, trying to get metldr to load from OtherOS. Interesting thing, I am not using the exploit. I always assumed the enable isolation mode register was hypervisor privileged.
It's not, it's kernel privileged, which means using hypervisor calls you can all get to it. So, get to hacking. http://pastie.org/795371 is the code I am playing with.
I'm not that opposed to releasing the exploit, but I think the majority of you are going to be disappointed, even if you do get it working. Unless you have pushed the HV to it's limits, this exploit really isn't going to do much for you... yet.
So install OtherOS and start playing around. If people start coming up with convincing reasons why they need the exploit to go further, I'll release it. It's just a waste to release if people can't make use of it.
As far as the GPU goes, I have full access to the GPU memory space 0x2800... But without a driver, it's useless. 3D video card drivers are notoriously hard to write, look at the ATI and NVIDIA ones for linux. The best are still the closed source manufacturer ones.
I'm not even sure I believe that the HV restricts video card access, just that the OtherOS driver is 2D. If someone skilled in video card driver development comes forward, and they can explain in detail what the HV is restricting, I'll send them the exploit."
Code:volatile int init_module() { unsigned long priv2_addr, problem_phys, local_store_phys, context_addr, shadow_addr, spe_id, vas; lv1_get_virtual_address_space_id_of_ppe(0, &vas); printk(KERN_ERR "die kernel %d\n", lv1_destruct_logical_spe(0xb)); printk(KERN_ERR "construct SPE: %d\n", lv1_construct_logical_spe(0x10,0x10,0x10,0x10,0x10, vas, 0, &priv2_addr, &problem_phys, &local_store_phys, &context_addr, &shadow_addr, &spe_id)); boom_lpar(shadow_addr); printk(KERN_ERR "make SPE id: %d\n", spe_id); printk(KERN_ERR "enable SPE: %d\n", lv1_enable_logical_spe(spe_id, 0)); unsigned long *problem_mapped, *privileged_mapped, *local_mapped; problem_mapped =__ioremap((unsigned long)problem_phys, 0x20000, PAGE_SHARED_X); privileged_mapped =__ioremap((unsigned long)priv2_addr, 0x20000, PAGE_SHARED_X); local_mapped =__ioremap((unsigned long)local_store_phys, 0x40000, PAGE_SHARED_X); printk(KERN_ERR "status: %lx\n", problem_mapped[0x4020/8]); printk(KERN_ERR "privileged control: %lx\n", privileged_mapped[0x4040/8]); privileged_mapped[0x4040/8] |= 4; printk(KERN_ERR "privileged control: %lx\n", privileged_mapped[0x4040/8]); struct file* fd; mm_segment_t old_fs = get_fs(); set_fs(KERNEL_DS); fd = filp_open("/work/pwned/metldr", O_RDONLY, 0); if(!IS_ERR(fd)) { printk(KERN_ERR "file is open\n"); printk(KERN_ERR "read %d\n", fd->f_op->read(fd, local_mapped, 0x40000, &fd->f_pos)); filp_close(fd, NULL); } else { printk(KERN_ERR "file open failed!!!!\n"); } set_fs(old_fs); printk(KERN_ERR "read in metldr\n"); problem_mapped[0x4018/8] |= 3; int i; for(i=0;i<0x20;i++) { printk(KERN_ERR "status: %lx\n", problem_mapped[0x4020/8]); } printk(KERN_ERR "destruct SPE: %d\n", lv1_destruct_logical_spe(spe_id)); return 0; }
More PlayStation 3 News...
13250 HeyManHRU
13207 PS3 News
11287 elser1
11119 oVERSoLDiER
9248 GrandpaHomer
8578 Tidusnake666
7968 saviour07
7340 condorstrike
7258 deank
6858 OGroteKoning
24983 PS3 News
5279 Starlight
2965 HeyManHRU
2173 CJPC
2124 elser1
1818 cfwprophet
1756 her0
1570 oVERSoLDiER
1291 GrandpaHomer
1080 barrybarryk






