summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2015-04-23WIP: kdbus: translate capabilities between namespaceskdbusDavid Herrmann1-42/+68
Right now, we always drop capability-items if we cross user-namespaces. However, the kernel _does_ support capability translation, as defined in ./security/commoncap.c cap_capable(). This patch adds capability translation support just like cap_capable() does. This way, a message sent from a task into a child user-namespace of its own, will retain the capability-item and thus keep the parent privileged inside of the user-namespace of its children. XXX: We hard-code the behavior of cap_capable() right now, which is bogus. We should integrate this with the security subsystem, just like cap_capable() does. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-23kdbus: fix up documentation of ioctl handlersDavid Herrmann5-16/+16
We support feature negotiation on ioctls. As this is not necessarily fully generic, we indicate this by returning >0 from kdbus_args_parse(). Therefore, all ioctl handlers that forward the return value of kdbus_args_parse() might also return >0 on negotiation. Which is totally fine and handled in kdbus_handle_ioctl(). However, the documentation of the ioctl handlers doesn't reflect that behavior. Fix those up! Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-22kdbus: drop obsolete WARN_ONDavid Herrmann1-1/+1
entry->user is never set to an error-code. Drop the obsolete WARN_ON which is a leftover from before the quota rework. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-21kdbus: pool: use __vfs_read()Sergei Zviagintsev1-1/+1
After commit 5d5d56897530 ("make new_sync_{read,write}() static") ->read() cannot be called directly. kdbus_pool_slice_copy() leads to oops, which can be reproduced by launching tools/testing/selftests/kdbus/kdbus-test -t message-quota: [ 1167.146793] BUG: unable to handle kernel NULL pointer dereference at (null) [ 1167.147554] IP: [< (null)>] (null) [ 1167.148670] PGD 3a9dd067 PUD 3a841067 PMD 0 [ 1167.149611] Oops: 0010 [#1] SMP [ 1167.150088] Modules linked in: nfsv3 nfs kdbus lockd grace sunrpc [ 1167.150771] CPU: 0 PID: 518 Comm: kdbus-test Not tainted 4.0.0-next-20150420-kdbus #62 [ 1167.150771] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011 [ 1167.150771] task: ffff88003daed120 ti: ffff88003a800000 task.ti: ffff88003a800000 [ 1167.150771] RIP: 0010:[<0000000000000000>] [< (null)>] (null) [ 1167.150771] RSP: 0018:ffff88003a803bc0 EFLAGS: 00010286 [ 1167.150771] RAX: ffff8800377fb000 RBX: 00000000000201e8 RCX: ffff88003a803c00 [ 1167.150771] RDX: 0000000000000b40 RSI: ffff8800377fb4c0 RDI: ffff88003d815700 [ 1167.150771] RBP: ffff88003a803c48 R08: ffffffff8139e380 R09: ffff880039d80490 [ 1167.150771] R10: ffff88003a803a90 R11: 00000000000004c0 R12: 00000000002a24c0 [ 1167.150771] R13: 0000000000000b40 R14: ffff88003d815700 R15: ffffffff8139e460 [ 1167.150771] FS: 00007f41dccd4740(0000) GS:ffff88003fc00000(0000) knlGS:0000000000000000 [ 1167.150771] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1167.150771] CR2: 0000000000000000 CR3: 000000003ccdf000 CR4: 00000000000007b0 [ 1167.150771] Stack: [ 1167.150771] ffffffffa0065497 ffff88003a803c10 00007ffffffff000 ffff88003aaa67c0 [ 1167.150771] 00000000000004c0 ffff88003aaa6870 ffff88003ca83300 ffffffffa006537d [ 1167.150771] 00000000000201e8 ffffea0000ddfec0 ffff88003a803c20 0000000000000018 [ 1167.150771] Call Trace: [ 1167.150771] [<ffffffffa0065497>] ? kdbus_pool_slice_copy+0x127/0x200 [kdbus] [ 1167.150771] [<ffffffffa006537d>] ? kdbus_pool_slice_copy+0xd/0x200 [kdbus] [ 1167.150771] [<ffffffffa006670a>] kdbus_queue_entry_move+0xaa/0x180 [kdbus] [ 1167.150771] [<ffffffffa0059e64>] kdbus_conn_move_messages+0x1e4/0x2c0 [kdbus] [ 1167.150771] [<ffffffffa006234e>] kdbus_name_acquire+0x31e/0x390 [kdbus] [ 1167.150771] [<ffffffffa00625c5>] kdbus_cmd_name_acquire+0x125/0x130 [kdbus] [ 1167.150771] [<ffffffffa005db5d>] kdbus_handle_ioctl+0x4ed/0x610 [kdbus] [ 1167.150771] [<ffffffff811040e0>] do_vfs_ioctl+0x2e0/0x4e0 [ 1167.150771] [<ffffffff81389750>] ? preempt_schedule_common+0x1f/0x3f [ 1167.150771] [<ffffffff8110431c>] SyS_ioctl+0x3c/0x80 [ 1167.150771] [<ffffffff8138c36e>] system_call_fastpath+0x12/0x71 [ 1167.150771] Code: Bad RIP value. [ 1167.150771] RIP [< (null)>] (null) [ 1167.150771] RSP <ffff88003a803bc0> [ 1167.150771] CR2: 0000000000000000 [ 1167.168756] ---[ end trace a676bcfa75db5a96 ]--- Use __vfs_read() instead. Signed-off-by: Sergei Zviagintsev <sergei@s15v.net> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-20kdbus: copy small ioctl payloads to stackDavid Herrmann4-50/+31
Right now, we use memdup_user() on all ioctl payloads. However, most of the time an ioctl payload is pretty small. 512 bytes on stack seem reasonable (similar to what poll() does) to speed up small ioctl payloads. Add a command-buffer to kdbus_args and use it instead of kmalloc() for reasonably small payloads. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-20kdbus: no need to ref current->mmDavid Herrmann1-18/+3
If we access current->mm temporarily, there is no need to ref it. It can only be changed by us, so no-one can race with us. Avoid ref'ing and unref'ing it just to access some of its fields, similar to what syscalls in mm/ do. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-20kdbus: optimize auxgroup collectorDavid Herrmann1-6/+4
current->creds can only be changed by 'current'. That is, as long as we only access our own credentials, we can be sure it does not change. Hence, there is no need to ref cred->group_info if all we do is copy its content. This avoids touching shared cachelines when collecting auxgroups. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-18samples/kdbus: stub out code for glibc < 2.7Daniel Mack1-2/+21
Andrew Morton reports the following build error in samples/kdbus on Fedora Core 6: samples/kdbus/kdbus-workers.c:73:26: error: sys/signalfd.h: No such file or directory samples/kdbus/kdbus-workers.c: In function 'master_new': samples/kdbus/kdbus-workers.c:231: warning: implicit declaration of function 'signalfd' samples/kdbus/kdbus-workers.c:231: error: 'SFD_CLOEXEC' undeclared (first use in this function) samples/kdbus/kdbus-workers.c:231: error: (Each undeclared identifier is reported only once samples/kdbus/kdbus-workers.c:231: error: for each function it appears in.) samples/kdbus/kdbus-workers.c: In function 'master_handle_signal': samples/kdbus/kdbus-workers.c:406: error: storage size of 'val' isn't known samples/kdbus/kdbus-workers.c:406: warning: unused variable 'val' samples/kdbus/kdbus-workers.c: In function 'child_run': samples/kdbus/kdbus-workers.c:773: error: 'CLOCK_MONOTONIC_COARSE' undeclared (first use in this function) samples/kdbus/kdbus-workers.c: In function 'bus_open_connection': samples/kdbus/kdbus-workers.c:1038: error: 'O_CLOEXEC' undeclared (first use in this function) samples/kdbus/kdbus-workers.c: In function 'bus_make': samples/kdbus/kdbus-workers.c:1275: error: 'O_CLOEXEC' undeclared (first use in this function) Fedora Core 6 was released in 2006, which predates the introduction of signalfds in the kernel (v2.6.22, 2007). The example cannot be built without signalfds, and kbuild cannot depend on specific features of the local libc when building userspace executables, so we have to work around the issue by checking for specific glibc versions at compile time and stub the entire thing if it can't be compiled. Reported-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-18kdbus: remove unused linux/version.h includeWei Yongjun1-1/+0
Remove <linux/version.h> include, it's not needed. Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-18kdbus: skip acquiring an active reference in poll()David Herrmann1-7/+9
During poll(), we currently acquire an active reference to the connection in question to verify it's still active. If it's not active, anymore, we return POLLHUP. This works fine, but requires an atomic_inc() to acquire the active reference. However, all we need is a guarantee that the connection is active right now, and a guarantee we're called again once this changes. This is as simple as adding the waitqueue first, then checking the active-state afterwards. kdbus_conn_disconnect() guarantees to wake us up _after_ deactivating the connection, thus providing the required barrier implicitly (in case someone is actually polling / waiting on the connection). Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-18kdbus: reduce scope of handle lockingDavid Herrmann1-27/+83
A kdbus handle is used to create objects in the kdbus hierarchy. During open(), we do not have enough information to know how to setup the object. Therefore, we provide setup ioctls, which allow user-space to pass in parameters and options how the to-be-created object should behave. Once setup is done, we allow user-space to use ioctls to operate on that newly created object. It is important to notice: 1) Only one setup ioctl can ever be called on a handle. You cannot call multiple, different setup ioctls on the same handle. 2) A setup ioctl can only be called once, if it succeeded. If it failed, it must not modify the handle in any way. If it succeeded, no further setup ioctl can be issued. 3) After a setup ioctl is done, the handle is constant and must not be modified in any way. So far, we used a write-lock around all setup ioctls, and a read-lock around everything else. The handle setup-indicator (the type field) can only be set under the write-lock. Whenever you access the handle under a read-lock, you must verify it was set before, otherwise, you must bail out as the handle was not initialized, yet. This has the downside that we need a read-lock on all operations on the handle. For performance reasons, we should avoid that. This patch turns the rwlock into a mutex and removes the read-side lock from all paths. It relies on the 3 behaviors described above. With this patch, the mutex is only taken around setup ioctls. Furthermore, the setup-indicator (the type field) is only ever set if the mutex is held. The mutex guarantees that multiple setup ioctls cannot race, and also, that only one setup ioctl will ever succeed. If a setup ioctl is called after setup was already finished, we do not touch the handle at all and immediately fail. Furthermore, all other operations (non-setup operations) can only be called once setup is done. Therefore, we must synchronize them with any racing setup, otherwise, they might access the handle which is currently modified by setup. We protect from this race by setting the setup-indicator (the type field) _last_, and issue a write-barrier before setting it. Once it is set, we never modify the handle ever again; it is constant from now on until file-release. Hence, on the read-side we simply read the type field and issue a read-barrier afterwards. _Iff_ the type field was not set, yet, we must not access the handle in any way, but bail out immediately. Setup was not done, yet. But if the type field was set, the read-barrier pairs with the write-barrier during setup. All member fields of the handle object are guaranteed to be accessible by us, as the type-field is always the last field that is written. With this in place, we reduce the locking-overhead of all non-setup ioctls to a read-barrier, instead of a read-side lock. And in combination with the follow-up that removes the active-refs from kdbus_handle_poll(), we're now lock-free in ->poll and ->mmap callbacks. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-18kdbus: use rcu to access exe file in metadataDaniel Mack1-4/+6
Commit 90f31d0ea888 ("mm: rcu-protected get_mm_exe_file()") removed mm->mmap_sem from mm->exe_file read side. Follow that change in the kdbus metadata code. Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Cc: David Herrmann <dh.herrmann@gmail.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-18kdbus: turn kdbus_node_idr into an idaDavid Herrmann3-18/+8
We no longer use the node-idr for lookups. We're only interested in unique ID allocation. Hence, turn the kdbus_node_idr into an ida and drop the now redundant locking. This is also what kernfs does for ino allocations. Reported-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2015-04-10kdbus: avoid the use of struct timespecArnd Bergmann2-10/+3
I did a routine check for new users of 'timespec', which we are trying to remove from the kernel in order to survive y2038. kdbus came up and looks particularly trivial to clean up. This changes the three ktime_get_ts() variants used in kdbus to ktime_get_ns(), which aside from removing timespec also simplifies the code and makes it slightly more efficient by avoiding a two-way conversion. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-10Documentation: kdbus: Fix typosSergei Zviagintsev7-32/+29
Signed-off-by: Sergei Zviagintsev <sergei@s15v.net> Acked-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-10Documentation: kdbus: Fix description of KDBUS_SEND_SYNC_REPLY flagSergei Zviagintsev1-2/+2
Signed-off-by: Sergei Zviagintsev <sergei@s15v.net> Acked-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-10Documentation: kdbus: Update list of ioctls which cause writing to ↵Sergei Zviagintsev1-0/+6
receiver's pool Add KDBUS_CMD_BUS_CREATOR_INFO. Signed-off-by: Sergei Zviagintsev <sergei@s15v.net> Acked-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-10Documentation: kdbus: Fix list of KDBUS_CMD_ENDPOINT_UPDATE errorsSergei Zviagintsev1-7/+0
Remove EEXIST. Signed-off-by: Sergei Zviagintsev <sergei@s15v.net> Acked-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-10kdbus: uapi: Fix kernel-doc for enum kdbus_send_flagsSergei Zviagintsev1-1/+1
Signed-off-by: Sergei Zviagintsev <sergei@s15v.net> Acked-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-03selftest/kdbus: enable cross compilationTyler Baker1-2/+4
Use the CC variable instead of hard coding gcc and include lib.mk. Signed-off-by: Tyler Baker <tyler.baker@linaro.org> Acked-by: Shuah Khan <shuahkh@osg.samsung.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-01samples: kdbus: build kdbus-workers conditionallyDaniel Mack2-1/+8
Give the kdbus sample its own config switch and only build it if it's explicitly switched on. Signed-off-by: Daniel Mack <daniel@zonque.org> Reviewed-by: David Herrmann <dh.herrmann@gmail.com> Reported-by: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-25kdbus: Fix CONFIG_KDBUS help textDaniel Mack1-3/+4
Drop a left-over from the times when documentation lived in a simple text file, which is no longer the case. Mention the auto-generated man-pages and HTML files instead. Reported-by: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Daniel Mack <daniel@zonque.org> Reviewed-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-17kdbus: connection: fix handling of failed fget()Daniel Mack1-3/+2
The patch 5fc8dd5c84fc: "kdbus: add connection, queue handling and message validation code" from Sep 11, 2014, leads to the following static checker warning: ipc/kdbus/connection.c:2000 kdbus_cmd_send() warn: 'cancel_fd' isn't an ERR_PTR Fix this by checking for NULL pointers returned from fget(). Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-17kdbus: fix header guard nameLucas De Marchi1-3/+3
UAPI headers have a _UAPI_ as prefix, which is removed during headers_install. If it's put as a suffix it will not be removed and will be the only header with UAPI in the header guard macro. Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-16Documentation/kdbus: replace 'reply_cookie' with 'cookie_reply'Lukasz Skalski1-1/+1
The member field is called 'cookie_reply', fix the documentation which incorrectly used 'reply_cookie'. Signed-off-by: Lukasz Skalski <l.skalski@samsung.com> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-16selftests/kdbus: fix gitignoreDavid Herrmann1-3/+1
Drop unused elements from .gitignore (which are leftovers when documentation was placed in the same directory). Add "kdbus-test" to .gitignore, which is the test binary of all kdbus selftests. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-16Documentation/kdbus: support quiet buildsDavid Herrmann1-3/+13
Add support for quiet builds, just like Documentation/DocBook/Makefile supports. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-16Documentation/kdbus: fix out-of-tree buildsDavid Herrmann1-1/+1
Don't use $(obj) to access source files, but use $(srctree)/$(src)/ instead. This fixes build issues if you use O= with a directory other than the source directory. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-16samples/kdbus: drop wrong includeDavid Herrmann1-3/+1
There is no reason to use ./include/uapi/ directly from samples. If your system headers are not up-to-date, you _need_ to run "make headers-install" (which will install them to ./usr/ in your kernel tree) before building the examples. Otherwise, you will get warnings and build failures. Once ./usr/ is updated with the correct headers, it contains everything we need, so drop -Iinclude/uapi from the kdbus-workers CFLAGS. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-15kdbus: fix minor typo in the walk-through exampleNicolas Iooss1-2/+2
s/receveiver/receiver/ Signed-off-by: Nicolas Iooss <nicolas.iooss_linux@m4x.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-12kdbus: samples/kdbus: add -lrtDavid Herrmann1-0/+1
On older systems -lrt is needed for clock_gettime(). Add it to HOSTLOADLIBES of kdbus-workers so it builds fine on those systems. Reported-by: Sasha Levin <sasha.levin@oracle.com> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09Documentation: kdbus: fix location for generated filesDaniel Mack2-2/+4
The generated files should reside in Documentation/kdbus, not in the top-level of the source tree. Also add a .gitignore file and ignore everything that was built from the XML files. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add selftestsDaniel Mack29-0/+11191
This patch adds an extensive test suite for kdbus that checks the most important code paths in the driver. The idea is to extend the test suite over time. Also, this code can serve as another example for how to use the kernel API from userspace. The code in the kdbus test suite makes use of the ioctl wrappers provided by samples/kdbus/kdbus-api.h. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add walk-through user space exampleDaniel Mack5-1/+1453
Provide a walk-through example that explains how to use the low-level ioctl API that kdbus offers. This example is meant to be useful for developers who want to gain a in-depth understanding of how the kdbus API works by reading a well-documented real-world example. This program computes prime-numbers based on the sieve of Eratosthenes. The master sets up a shared memory region and spawns workers which clear out the non-primes. The master reacts to keyboard input and to client-requests to control what each worker does. Note that this is in no way meant as efficient way to compute primes. It should only serve as example how a master/worker concept can be implemented with kdbus used as control messages. The main process is called the 'master'. It creates a new, private bus which will be used between the master and its workers to communicate. The master then spawns a fixed number of workers. Whenever a worker dies (detected via SIGCHLD), the master spawns a new worker. When done, the master waits for all workers to exit, prints a status report and exits itself. The master process does *not* keep track of its workers. Instead, this example implements a PULL model. That is, the master acquires a well-known name on the bus which each worker uses to request tasks from the master. If there are no more tasks, the master will return an empty task-list, which casues a worker to exit immediately. As tasks can be computationally expensive, we support cancellation. Whenever the master process is interrupted, it will drop its well-known name on the bus. This causes kdbus to broadcast a name-change notification. The workers check for broadcast messages regularly and will exit if they receive one. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add Makefile, Kconfig and MAINTAINERS entryDaniel Mack4-1/+48
This patch hooks up the build system to actually compile the files added by previous patches. It also adds an entry to MAINTAINERS to direct people to Greg KH, David Herrmann, Djalal Harouni and me for questions and patches. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add policy database implementationDaniel Mack2-0/+540
This patch adds the policy database implementation. A policy database restricts the possibilities of connections to own, see and talk to well-known names. It can be associated with a bus (through a policy holder connection) or a custom endpoint. By default, buses have an empty policy database that is augmented on demand when a policy holder connection is instantiated. Policies are set through KDBUS_CMD_HELLO (when creating a policy holder connection), KDBUS_CMD_CONN_UPDATE (when updating a policy holder connection), KDBUS_CMD_EP_MAKE (creating a custom endpoint) or KDBUS_CMD_EP_UPDATE (updating a custom endpoint). In all cases, the name and policy access information is stored in items of type KDBUS_ITEM_NAME and KDBUS_ITEM_POLICY_ACCESS. See kdbus.policy(7) for more details. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add name registry implementationDaniel Mack2-0/+846
This patch adds the name registry implementation. Each bus instantiates a name registry to resolve well-known names into unique connection IDs for message delivery. The registry will be queried when a message is sent with kdbus_msg.dst_id set to KDBUS_DST_ID_NAME, or when a registry dump is requested. It's important to have this registry implemented in the kernel to implement lookups and take-overs in a race-free way. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add code for buses, domains and endpointsDaniel Mack6-0/+1376
Add the logic to handle the following entities: Domain: A domain is an unamed object containing a number of buses. A domain is automatically created when an instance of kdbusfs is mounted, and destroyed when it is unmounted. Every domain offers its own 'control' device node to create buses. Domains are isolated from each other. Bus: A bus is a named object inside a domain. Clients exchange messages over a bus. Multiple buses themselves have no connection to each other; messages can only be exchanged on the same bus. The default entry point to a bus, where clients establish the connection to, is the "bus" device node /sys/fs/kdbus/<bus name>/bus. Common operating system setups create one "system bus" per system, and one "user bus" for every logged-in user. Applications or services may create their own private named buses. Endpoint: An endpoint provides the device node to talk to a bus. Opening an endpoint creates a new connection to the bus to which the endpoint belongs. Every bus has a default endpoint called "bus". A bus can optionally offer additional endpoints with custom names to provide a restricted access to the same bus. Custom endpoints carry additional policy which can be used to give sandboxed processes only a locked-down, limited, filtered access to the same bus. See kdbus(7), kdbus.bus(7), kdbus.endpoint(7) and kdbus.fs(7) for more details. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add code for notifications and matchesDaniel Mack4-0/+872
This patch adds code for matches and notifications. Notifications are broadcast messages generated by the kernel, which notify subscribes when connections are created or destroyed, when well-known-names have been claimed, released or changed ownership, or when reply messages have timed out. Matches are used to tell the kernel driver which broadcast messages a connection is interested in. Matches can either be specific on one of the kernel-generated notification types, or carry a bloom filter mask to match against a message from userspace. The latter is a way to pre-filter messages from other connections in order to mitigate unnecessary wakeups. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add code to gather metadataDaniel Mack2-0/+1221
A connection chooses which metadata it wants to have attached to each message it receives with kdbus_cmd_hello.attach_flags. The metadata will be attached as items to the messages. All metadata refers to information about the sending task at sending time, unless otherwise stated. Also, the metadata is copied, not referenced, so even if the sending task doesn't exist anymore at the time the message is received, the information is still preserved. In traditional D-Bus, userspace tasks like polkit or journald make a live lookup in procfs and sysfs to gain information about a sending task. This is racy, of course, as in a a connection-less system like D-Bus, the originating peer can go away immediately after sending the message. As we're moving D-Bus prmitives into the kernel, we have to provide the same semantics here, and inform the receiving peer on the live credentials of the sending peer. Metadata is collected at the following times. * When a bus is created (KDBUS_CMD_MAKE), information about the calling task is collected. This data is returned by the kernel via the KDBUS_CMD_BUS_CREATOR_INFO call. * When a connection is created (KDBUS_CMD_HELLO), information about the calling task is collected. Alternatively, a privileged connection may provide 'faked' information about credentials, PIDs and security labels which will be stored instead. This data is returned by the kernel as information on a connection (KDBUS_CMD_CONN_INFO). Only metadata that a connection allowed to be sent (by setting its bit in attach_flags_send) will be exported in this way. * When a message is sent (KDBUS_CMD_SEND), information about the sending task and the sending connection are collected. This metadata will be attached to the message when it arrives in the receiver's pool. If the connection sending the message installed faked credentials (see kdbus.connection(7)), the message will not be augmented by any information about the currently sending task. Which metadata items are actually delivered depends on the following sets and masks: (a) the system-wide kmod creds mask (module parameter 'attach_flags_mask') (b) the per-connection send creds mask, set by the connecting client (c) the per-connection receive creds mask, set by the connecting client (d) the per-bus minimal creds mask, set by the bus creator (e) the per-bus owner creds mask, set by the bus creator (f) the mask specified when querying creds of a bus peer (g) the mask specified when querying creds of a bus owner With the following rules: [1] The creds attached to messages are determined as a & b & c. [2] When connecting to a bus (KDBUS_CMD_HELLO), and ~b & d != 0, the call will fail with, -1, and errno is set to ECONNREFUSED. [3] When querying creds of a bus peer, the creds returned are a & b & f. [4] When querying creds of a bus owner, the creds returned are a & e & g. See kdbus.metadata(7) and kdbus.item(7) for more details on which metadata can currently be attached to messages. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add node and filesystem implementationDaniel Mack5-0/+1534
kdbusfs is a filesystem that will expose a fresh kdbus domain context each time it is mounted. Per mount point, there will be a 'control' node, which can be used to create buses. fs.c contains the implementation of that pseudo-fs. Exported inodes of 'file' type have their i_fop set to either kdbus_handle_control_ops or kdbus_handle_ep_ops, depending on their type. The actual dispatching of file operations is done from handle.c node.c is an implementation of a kdbus object that has an id and children, organized in an R/B tree. The tree is used by the filesystem code for lookup and iterator functions, and to deactivate children once the parent is deactivated. Every inode exported by kdbusfs is backed by a kdbus_node, hence it is embedded in struct kdbus_ep, struct kdbus_bus and struct kdbus_domain. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add connection, queue handling and message validation codeDaniel Mack11-1/+4722
This patch adds code to create and destroy connections, to validate incoming messages and to maintain the queue of messages that are associated with a connection. Note that connection and queue have a 1:1 relation, the code is only split in two parts for cleaner separation and better readability. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add connection pool implementationDaniel Mack2-0/+774
A pool for data received from the kernel is installed for every connection of the bus, and it is used to copy data from the kernel to userspace clients, for messages and other information. It is accessed when one of the following ioctls is issued: * KDBUS_CMD_MSG_RECV, to receive a message * KDBUS_CMD_NAME_LIST, to dump the name registry * KDBUS_CMD_CONN_INFO, to retrieve information on a connection The offsets returned by either one of the aforementioned ioctls describe offsets inside the pool. Internally, the pool is organized in slices, that are dynamically allocated on demand. The overall size of the pool is chosen by the connection when it connects to the bus with KDBUS_CMD_HELLO. In order to make the slice available for subsequent calls, KDBUS_CMD_FREE has to be called on the offset. To access the memory, the caller is expected to mmap() it to its task. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add driver skeleton, ioctl entry points and utility functionsDaniel Mack7-0/+1167
Add the basic driver structure. handle.c is the main ioctl command dispatcher that calls into other parts of the driver. main.c contains the code that creates the initial domain at startup, and util.c has utility functions such as item iterators that are shared with other files. limits.h describes limits on things like maximum data structure sizes, number of messages per users and suchlike. Some of the numbers currently picked are rough ideas of what what might be sufficient and are probably rather conservative. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add uapi header fileDaniel Mack2-0/+980
This patch adds the header file which describes the low-level transport protocol used by various ioctls. The header file is located in include/uapi/linux/ as it is shared between kernel and userspace, and it only contains data structure definitions, enums and defines for constants. The low-level kernel API of kdbus is exposed through ioctls, employed on nodes exposed by kdbusfs. We've chosen a ioctl-based implementation over syscalls for various reaons: * The ioctls kdbus offers are completely specific to nodes exposed by kdbusfs and can not be applied to any other file descriptor in a system. * The file descriptors derived from opening nodes in kdbusfs can only be used for poll(), close() and the ioctls described in kdbus.h. * Not all systems will make use of kdbus eventually, and we want to make as many parts of the kernel optional at build time. * We want to build the kdbus code as module, which is impossible to do when implemented with syscalls. * The ioctl dispatching logic does not show up in our performance graphs; its overhead is negligible. * For development, being able to build, load and unload a separate module with a versioned name suffix is essential. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-09kdbus: add documentationDaniel Mack15-1/+7339
kdbus is a system for low-latency, low-overhead, easy to use interprocess communication (IPC). The interface to all functions in this driver is implemented via ioctls on files exposed through a filesystem called 'kdbusfs'. The default mount point of kdbusfs is /sys/fs/kdbus. This patch adds detailed documentation about the kernel level API design. This patch adds a set of comprehensive set of DocBook files which can be turned into man-pages using 'make mandocs', or into HTML files with 'make htmldocs'. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-08Linux 4.0-rc3Linus Torvalds1-1/+1
2015-03-08sunrpc: fix braino in ->poll()Al Viro1-1/+1
POLL_OUT isn't what callers of ->poll() are expecting to see; it's actually __SI_POLL | 2 and it's a siginfo code, not a poll bitmap bit... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Cc: stable@vger.kernel.org Cc: Bruce Fields <bfields@fieldses.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-03-08Merge tag 'usb-4.0-rc3' of ↵Linus Torvalds34-109/+374
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB fixes from Greg KH: "Here's a round of USB fixes for 4.0-rc3. Nothing major, the usual gadget, xhci and usb-serial fixes and a few new device ids as well. All have been in linux-next successfully" * tag 'usb-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (36 commits) xhci: Workaround for PME stuck issues in Intel xhci xhci: fix reporting of 0-sized URBs in control endpoint usb: ftdi_sio: Add jtag quirk support for Cyber Cortex AV boards USB: ch341: set tty baud speed according to tty struct USB: serial: cp210x: Adding Seletek device id's USB: pl2303: disable break on shutdown USB: mxuport: fix null deref when used as a console USB: serial: clean up bus probe error handling USB: serial: fix port attribute-creation race USB: serial: fix tty-device error handling at probe USB: serial: fix potential use-after-free after failed probe USB: console: add dummy __module_get USB: ftdi_sio: add PIDs for Actisense USB devices Revert "USB: serial: make bulk_out_size a lower limit" cdc-acm: Add support for Denso cradle CU-321 usb-storage: support for more than 8 LUNs uas: Add US_FL_NO_REPORT_OPCODES for JMicron JMS539 USB: usbfs: don't leak kernel data in siginfo xhci: Clear the host side toggle manually when endpoint is 'soft reset' xhci: Allocate correct amount of scratchpad buffers ...
2015-03-08Merge tag 'tty-4.0-rc3' of ↵Linus Torvalds15-61/+89
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty Pull tty/serial fixes from Greg KH: "Here are some tty and serial driver fixes for 4.0-rc3. Along with the atime fix that you know about, here are some other serial driver bugfixes as well. Most notable is a wait_until_sent bugfix that was traced back to being around since before 2.6.12 that Johan has fixed up. All have been in linux-next successfully" * tag 'tty-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: TTY: fix tty_wait_until_sent maximum timeout TTY: fix tty_wait_until_sent on 64-bit machines USB: serial: fix infinite wait_until_sent timeout TTY: bfin_jtag_comm: remove incorrect wait_until_sent operation net: irda: fix wait_until_sent poll timeout serial: uapi: Declare all userspace-visible io types serial: core: Fix iotype userspace breakage serial: sprd: Fix missing spin_unlock in sprd_handle_irq() console: Fix console name size mismatch tty: fix up atime/mtime mess, take four serial: 8250_dw: Fix get_mctrl behaviour serial:8250:8250_pci: delete unneeded quirk entries serial:8250:8250_pci: fix redundant entry report for WCH_CH352_2S Change email address for 8250_pci serial: 8250: Revert "tty: serial: 8250_core: read only RX if there is something in the FIFO" Revert "tty/serial: of_serial: add DT alias ID handling"