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...
13261 HeyManHRU
13236 PS3 News
11307 elser1
11169 oVERSoLDiER
9248 GrandpaHomer
8628 Tidusnake666
7968 saviour07
7340 condorstrike
7258 deank
6858 OGroteKoning
25108 PS3 News
5279 Starlight
2964 HeyManHRU
2178 elser1
2174 CJPC
1815 cfwprophet
1756 her0
1573 oVERSoLDiER
1294 GrandpaHomer
1080 barrybarryk






