On 30/07/2019 20:08, Rob Herring wrote: > On Tue, Jul 30, 2019 at 12:55 PM Alyssa Rosenzweig > <alyssa.rosenzweig@xxxxxxxxxxxxx> wrote: >> >>> In any case, per process AS is a prerequisite to all this. >> >> Oh, I hadn't realized that was still a todo. In the meantime, what's the >> implication of shipping without it? (I.e. in which threat model are >> users vulnerable without it?) Malicious userspace process snooping on >> other framebuffers (on X11, they could do that anyway...)? Malicious >> userspace actually interfering with operation of other processes (is >> this really exploitable or just a theoretical concern)? Malicious 3D >> apps breaking out of the sandbox (i.e. WebGL) via a driver bug and >> snooping on other processes? Having a single address space means: Malicious userspace can: snoop and overwrite graphics buffers from other applications. I don't believe you can directly map the buffer into the other application, but the GPU provides plenty of functionality to implement a memcpy-like shader which can copy to/from buffers you don't own. WebGL: In *theory* the driver should ensure that any buffer accesses are contained before letting the shaders run. So this shouldn't actually allow breaking out of the sandbox. This is because the browser may use one process for multiple tabs (and one process = one AS in most cases) and they should be sandboxed. But obviously it only requires one driver bug for this to break as well. Also note that if the driver "trusts" any of the data shared with the GPU (e.g. follows pointers stored in GPU accessible memory or uses values to look up in an array without bounds checking) then a malicious userspace may be able to inject code into another process. So this could be a privilege escalation route. > I don't know. However, it's not that uncommon. freedreno is only now > in the process of supporting it. vc4 can't. v3d doesn't yet support > separate address spaces. Indeed it doesn't seem to actually concern many people. For example almost all GPUs allow any process to effectively DoS the GPU by submitting extremely long running jobs. Most OSes just reset the GPU in this case - which might take work from another process with it. Although kbase actually does try fairly hard to prevent that. Although somewhat amusingly, you might have noticed this lovely workaround in kbase: > if (kbase_hw_has_issue(kbdev, BASE_HW_ISSUE_8987)) { > bool use_workaround; > > use_workaround = DEFAULT_SECURE_BUT_LOSS_OF_PERFORMANCE; > if (use_workaround) { > dev_dbg(kbdev->dev, "GPU has HW ISSUE 8987, and driver configured for security workaround: 1 address space only"); > kbdev->nr_user_address_spaces = 1; > } > } I seriously doubt anyone ever set DEFAULT_SECURE_BUT_LOSS_OF_PERFORMANCE... But this was a hardware bug that broke the isolation between address spaces. Steve _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel