Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753901AbbK3RM3 (ORCPT ); Mon, 30 Nov 2015 12:12:29 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:64872 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751995AbbK3RM1 (ORCPT ); Mon, 30 Nov 2015 12:12:27 -0500 X-AuditID: cbfec7f4-f79026d00000418a-78-565c83776253 Subject: Re: [PATCH v1 0/1] ioctl to disallow detaching kernel USB drivers To: Alan Stern References: Cc: Greg KH , =?UTF-8?Q?Emilio_L=c3=b3pez?= , kborer@gmail.com, reillyg@chromium.org, keescook@chromium.org, linux-api@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, jorgelo@chromium.org, dan.carpenter@oracle.com From: Krzysztof Opasiak Message-id: <565C8376.6070505@samsung.com> Date: Mon, 30 Nov 2015 18:12:22 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-version: 1.0 In-reply-to: Content-type: text/plain; charset=windows-1252; format=flowed Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrJLMWRmVeSWpSXmKPExsVy+t/xq7rlzTFhBkd+WVq8/jedxaLj0Rom i+bF69ksWibeZLVYfvo4q8WZ7lyLzd872Cwu75rDZrFoWSuzxfmtB5gtJvy+wObA7TG74SKL x9/n11k8ds66y+6xf+4ado+PT2+xeMy++4PR4/MmuQD2KC6blNSczLLUIn27BK6MC7v2sxT8 F634dnc/ewPjKcEuRk4OCQETid57zUwQtpjEhXvr2boYuTiEBJYySvy+tJsZwnnOKPH57nVm kCphAS+JlT92sIHYIgJaEpubXoLFhQR8JK4eOcEO0sAssJFJou/QPaCxHBxsAvoS83aJgtTw AtUv2ncPbBuLgKrEyq5vrCC2qECExKmzb9kgagQlfky+xwJicwr4Siw82glWzyxgK7Hg/ToW CFteYvOat8wTGAVmIWmZhaRsFpKyBYzMqxhFU0uTC4qT0nMN9YoTc4tL89L1kvNzNzFCIuTL DsbFx6wOMQpwMCrx8EqYRYcJsSaWFVfmHmKU4GBWEuHdnRsTJsSbklhZlVqUH19UmpNafIhR moNFSZx37q73IUIC6YklqdmpqQWpRTBZJg5OqQbGGdv31uYIfUiLt7tpZvjl4v4Urj8qKXc7 F95aoKAQsHzeEfeXtm9Zo6WW9U5U1G6J+ykQLtP46a+uD/91sRLW4+tMrixxCVFqlTndv3fF rzQ++S/77nbsf88cbTllrUz1ejuTRctsbOYvtas++N/m9E0jk0n5P1a6rnFW17cIteuMPVX7 amOHEktxRqKhFnNRcSIAb3SBMYwCAAA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3007 Lines: 62 On 11/30/2015 05:16 PM, Alan Stern wrote: > On Fri, 27 Nov 2015, Krzysztof Opasiak wrote: > >>>> I run through your code and as far as I understand above is not exactly >>>> true. Your patch allows only to prevent userspace from accessing interfaces >>>> which has kernel drivers, there is no way to stop an application from taking >>>> control over all free interfaces. >>>> >>>> Let's say that your device has 3 interfaces. First of them has a kernel >>>> driver but second and third doesn't. You have 2 apps. One should communicate >>>> using second interface and another one third. But first app is malicious and >>>> it claims all free interfaces of received device (your patch doesn't prevent >>>> this). And when second app starts it is unable to do anything with the >>>> device because all interfaces are taken. How would you like to handle this? >>> >>> You can't, and why would you ever want to, as you can't tell what an app >>> "should" or "should not" do. If you really care about this, then use a >>> LSM policy to prevent this. >> >> Well, an app can declare what it does and what it needs in it's manifest >> file (or some equivalent of this) and the platform should ensure that >> app can do only what it has declared. >> >> I would really like to use LSM policy in here but currently it is >> impossible as one device node represents whole device. Permissions (even >> those from LSM) are being checked only on open() not on each ioctl() so >> as far as I know there is nothing which prevents any owner of opened fd >> to claim all available (not taken by someone else) interfaces and LSM >> policy is unable to filter those calls (unless we add some LSM hooks >> over there). > > How about this approach? Once a process has dropped its usbfs > privileges, it's not allowed to claim any interfaces (either explicitly > or implicitly). Instead, it or some manager program must claim the > appropriate interfaces before dropping privileges. > I agree that restricting interface claiming only to privileged process is a good idea. Unfortunately this generates a problem when program needs more than one interface (like in cdc - data + control for example). We need to declare both of them in first call to "usb-manager" or reopen the dev node at second call and claim all interfaces claimed using this fd till now and claim one more and then drop privileges and send a new fd. Maybe better option would be to add optional argument to claim interface ioctl() and allow to claim interface for other fd than the current one? So "usb-manager" could have fd with full control and claim interfaces for apps which have fds with restricted privileges. Best regards, -- Krzysztof Opasiak Samsung R&D Institute Poland Samsung Electronics -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/