summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2014-08-30sd-dhcp6-client: properly calculate buffer size when parsing optionsZbigniew Jędrzejewski-Szmek
Also make pointer calculations more explicit so they are easier to understand.
2014-08-30test-dhcp6-client: Fix option lengthPatrik Flykt
The whole DHCPv6 test message length was incorrectly used as the length of DHCPv6 options causing the following bad memory access: $ build/test-dhcp6-client Assertion 'interface_index >= -1' failed at ../src/libsystemd-network/sd-dhcp6-client.c:129, function sd_dhcp6_client_set_index(). Ignoring. ================================================================= ==29135==ERROR: AddressSanitizer: global-buffer-overflow on address 0x7fe204aa9148 at pc 0x7fe204a5958f bp 0x7fff3e47d470 sp 0x7fff3e47d460 READ of size 1 at 0x7fe204aa9148 thread T0 #0 0x7fe204a5958e in option_parse_hdr ../src/libsystemd-network/dhcp6-option.c:145 #1 0x7fe204a59884 in dhcp6_option_parse ../src/libsystemd-network/dhcp6-option.c:165 #2 0x7fe204a4eb9c in test_advertise_option ../src/libsystemd-network/test-dhcp6-client.c:227 #3 0x7fe204a51c58 in main ../src/libsystemd-network/test-dhcp6-client.c:584 #4 0x7fe2031590df in __libc_start_main (/lib64/libc.so.6+0x200df) #5 0x7fe204a4cc5b (/home/test/systemd/build/test-dhcp6-client+0x25c5b) 0x7fe204aa9148 is located 2 bytes to the right of global variable 'msg_advertise' from '../src/libsystemd-network/test-dhcp6-client.c' (0x7fe204aa9080) of size 198 0x7fe204aa9148 is located 56 bytes to the left of global variable 'msg_reply' from '../src/libsystemd-network/test-dhcp6-client.c' (0x7fe204aa9180) of size 173 SUMMARY: AddressSanitizer: global-buffer-overflow ../src/libsystemd-network/dhcp6-option.c:145 option_parse_hdr
2014-08-30cgroup-util: shorten cg_path_get_sessionZbigniew Jędrzejewski-Szmek
2014-08-30systemd: fix error messageZbigniew Jędrzejewski-Szmek
2014-08-30test-compress: also test with incompressible inputsZbigniew Jędrzejewski-Szmek
2014-08-30journal/compress: use LZ4_compress_continue()Evangelos Foutras
We can't use LZ4_compress_limitedOutput_continue() because in the worst-case scenario the compressed output can be slightly bigger than the input block. This generally affects very few blocks and is no reason to abort the compression process. I ran into this when I noticed that Chromium core dumps weren't being compressed. After switching to LZ4_compress_continue() a ~330MB Chromium core dump gets compressed to ~17M.
2014-08-30sd-ipv4ll: name the correct sourceTom Gundersen
2014-08-30Fix a few more typosRuben Kerkhof
2014-08-30libudev: fix symbol version for udev_queue_flush() and udev_queue_get_fd()Michael Biebl
Those symbols were introduced in commit 14cb733684d3c3f50d088a3a370ddf8e8894dfa4 and released in v215.
2014-08-30udev: bump event timeout to 60 secondsKay Sievers
2014-08-30udev: remove userspace firmware loading supportKay Sievers
2014-08-29timesyncd: check root distanceMiroslav Lichvar
NTPv4 servers don't reply with unsynchronized status when they lost synchronization, they only keep increasing the root dispersion and it's up to the client to decide at which point they no longer consider it synchronized. Ignore replies with root distance over 5 seconds.
2014-08-29timesyncd: get kernel timestamp in nanosecondsMiroslav Lichvar
2014-08-29timesyncd: fix calculation of transmit timeMiroslav Lichvar
The kernel timestamp (recv_time) is made earlier than current time (now_ts), use the timestamp captured before sending packet directly.
2014-08-29timesyncd: check if stratum is validMiroslav Lichvar
2014-08-29Fix a few typos in log messagesRuben Kerkhof
2014-08-28sd-event: simplify sd_event_source_set_name()David Herrmann
free_and_strdup() does exactly the same as sd_event_source_set_name(), use it!
2014-08-28sd-event: name event sources used in librariesTom Gundersen
This should help in debugging failing event sources.
2014-08-28sd-event: use event source name rather than address in debug messagesTom Gundersen
2014-08-28sd-event: allow naming event sourcesTom Gundersen
2014-08-28sd-rtnl: log if kernel buffer is overrun as we currently can't handle that caseTom Gundersen
2014-08-28hibernate-resume: refuse to run outside of an initrdLennart Poettering
2014-08-28networkctl: do not mix dns and ntp serversZbigniew Jędrzejewski-Szmek
2014-08-28bus: don't skip interfaces in bus_message_map_properties_changed()David Herrmann
Skipping interfaces randomly without the caller specifying it is nasty. Avoid this and let the caller do that themselves.
2014-08-28locale: fix sending PropertiesChanged for x11 keymap changedDavid Herrmann
The sd_bus_emit_properties_changed() call for x11 keymap changes lacks commas.. whoops. Fix it! Now localed emits PropertiesChanged signals again.
2014-08-28use the switch_root function in shutdownHarald Hoyer
removes code duplication also move switch-root to shared
2014-08-28macro: use unique variable names for math-macrosDavid Herrmann
Similar to container_of(), we now use unique variable names for the bascic math macros MAX, MIN, CLAMP, LESS_BY. Furthermore, unit tests are added to verify they work as expected. For a rationale, see: commit fb835651aff79a1e7fc5795086c9b26e59a8e6ca Author: David Herrmann <dh.herrmann@gmail.com> Date: Fri Aug 22 14:41:37 2014 +0200 shared: make container_of() use unique variable names
2014-08-28bus: fix use-after-free in slot-releaseDavid Herrmann
We must not access slot->floating after we possible dropped the last reference to it. Fix all callback-invocations to first check slot->floating and possible disconnect the slot, then release the last reference.
2014-08-28terminal: free sysview-device names on destructionDavid Herrmann
Don't leak the device-names during device destruction in sysview. Somehow, the device-name is "const char*", so make it "char*" first to avoid warnings when calling free() on it.
2014-08-28terminal: free xkb state on keyboard destructionDavid Herrmann
Fix leaking the xkb-state during keyboard destruction, leaking lots of xkb references into the wild.
2014-08-28nspawn: fix --network-interfaceTom Gundersen
Use SETLINK when modifying an existing link.
2014-08-28terminal: sysview: don't return uninitialized error codesDavid Herrmann
In case 'scan_evdev' and 'scan_drm' are both false, we never set 'r' to anyhting, thus return an uninitialized error code. Fix this by always returning 0 as we catch negative codes earlier, anyway. Thanks to Thomas H.P. Anderson for the report.
2014-08-27sd-journal: verify that object start with the field nameZbigniew Jędrzejewski-Szmek
If the journal is corrupted, we might return an object that does not start with the expected field name and/or is shorter than it should.
2014-08-27sd-journal: properly convert object->size on big endianZbigniew Jędrzejewski-Szmek
mmap code crashes when attempting to map an object of zero size. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758392 https://bugs.freedesktop.org/show_bug.cgi?id=82894
2014-08-27terminal: remove unused variableThomas Hindoe Paaboel Andersen
2014-08-27util: fix minimal race where we might miss SIGTERMs when forking off an agentLennart Poettering
Before forking, block all signals, and unblock them afterwards. This way the child will have them blocked, and we won't lose them.
2014-08-27terminal: add systemd-evcat input debugging toolDavid Herrmann
Like systemd-subterm, this new systemd-evcat tool should only be used to debug libsystemd-terminal. systemd-evcat attaches to the running session and pushes all evdev devices attached to the current session into an idev-session. All events of the created idev-devices are then printed to stdout for input-event debugging.
2014-08-27terminal: add xkb-based keyboard devices to idevDavid Herrmann
The idev-keyboard object provides keyboard devices to the idev interface. It uses libxkbcommon to provide proper keymap support. So far, the keyboard implementation is pretty straightforward with one keyboard device per matching evdev element. We feed everything into the system keymap and provide proper high-level keyboard events to the application. Compose-features and IM need to be added later.
2014-08-27terminal: add evdev elements to idevDavid Herrmann
The evdev-element provides linux evdev interfaces as idev-elements. This way, all real input hardware devices on linux can be used with the idev interface. We use libevdev to interface with the kernel. It's a simple wrapper library around the kernel evdev API that takes care to resync devices after kernel-queue overflows, which is a rather non-trivial task. Furthermore, it's a well tested interface used by all other major input users (Xorg, weston, libinput, ...). Last but not least, it provides nice keycode to keyname lookup tables (and vice versa), which is really nice for debugging input problems.
2014-08-27terminal: add input interfaceDavid Herrmann
The idev-interface provides input drivers for all libsystemd-terminal based applications. It is split into 4 main objects: idev_context: The context object tracks global state of the input interface. This will include data like system-keymaps, xkb contexts and more. idev_session: A session serves as controller for a set of devices. Each session on an idev-context is independent of each other. The session is also the main notification object. All events raised via idev are reported through the session interface. Apart of that, the session is a pretty dumb object that just contains devices. idev_element: Elements provide real hardware in the idev stack. For each hardware device, one element is added. Elements have no knowledge of higher-level device types, they only provide raw input data to the upper levels. For example, each evdev device is represented by a different element in an idev session. idev_device: Devices are objects that the application deals with. An application is usually not interested in elements (and those are hidden to applications), instead, they want high-level input devices like keyboard, touchpads, mice and more. Device are the high-level interface provided by idev. Each device might be fed by a set of elements. Elements drive the device. If elements are removed, devices are destroyed. If elements are added, suitable devices are created. Applications should monitor the system for sessions and hardware devices. For each session they want to operate on, they create an idev_session object and add hardware to that object. The idev interface requires the application to monitor the system (preferably via sysview_*, but not required) for hardware devices. Whenever hardware is added to the idev session, new devices *might* be created. The relationship between hardware and high-level idev-devices is hidden in the idev-session and not exposed. Internally, the idev elements and devices are virtual objects. Each real hardware and device type inherits those virtual objects and provides real elements and devices. Those types will be added in follow-up commits. Data flow from hardware to the application is done via idev_*_feed() functions. Data flow from applications to hardware is done via idev_*_feedback() functions. Feedback is usually used for LEDs, FF and similar operations.
2014-08-27terminal: add system view interfaceDavid Herrmann
We're going to need multiple binaries that provide session-services via logind device management. To avoid re-writing the seat/session/device scan/monitor interface for each of them, this commit adds a generic helper to libsystemd-terminal: The sysview interface scans and tracks seats, sessions and devices on a system. It basically mirrors the state of logind on the application side. Now, each session-service can listen for matching sessions and attach to them. On each session, managed device access is provided. This way, it is pretty simple to write session-services that attach to multiple sessions (even split across seats).
2014-08-27bus: split bus_map_all_properties into multiple helpersDavid Herrmann
The bus_map_all_properties() helper calls org.freedesktop.DBus.Properties.GetAll() on a given target and parses the result according to a given property-table. This simplifies dealing with DBus.Properties significantly. However, the function is blocking and thus not really useful in many situations. This patch extracts the core of this function and adds two new helpers which directly take dbus-messages as arguments. This way, you can issue asynchronous requests and parse the result via these helpers: bus_message_map_all_properties(): This is the same as bus_map_all_properties() but takes the result message from a GetAll() request as argument. You can thus issue an asynchronous GetAll() request and then use this helper once you got the result. bus_message_map_properties_changed(): This function takes a signal-message that was retrieved via a PropertiesChanged signal and then parses it like if you retrieved it via GetAll(). Furthermore, this function returns the number of matched properties that got invalidated by the PropertiesChanged signal, but didn't carry the new value. This way, the caller can issue a new GetAll() request and then parse the result. The old function bus_map_all_properties() is functionally unchanged, but now uses bus_message_map_all_properties() internally.
2014-08-27util: make lookup_uid() globalDavid Herrmann
This is a useful helper, make it global. It will be required for libsystemd-terminal, at minimum.
2014-08-27udev: add missing new-line in udevadm errorDavid Herrmann
fprintf() does not add new-lines automatically like log_*() does. Add the missing \n specified so "udevadm" invoked without arguments adds a newline to: udevadm: missing or unknown command
2014-08-27login: fix memory-leak on DropController()David Herrmann
Our bus-name watch helpers only remove a bus-name if it's not a controller, anymore. If we call manager_drop_busname() before unregistering the controller, the busname will not be dropped. Therefore, first drop the controller, then drop the bus-name.
2014-08-27shared: make container_of() use unique variable namesDavid Herrmann
If you stack container_of() macros, you will get warnings due to shadowing variables of the parent context. To avoid this, use unique names for variables. Two new helpers are added: UNIQ: This evaluates to a truly unique value never returned by any evaluation of this macro. It's a shortcut for __COUNTER__. UNIQ_T: Takes two arguments and concatenates them. It is a shortcut for CONCATENATE, but meant to defined typed local variables. As you usually want to use variables that you just defined, you need to reference the same unique value at least two times. However, UNIQ returns a new value on each evaluation, therefore, you have to pass the unique values into the macro like this: #define my_macro(a, b) __max_macro(UNIQ, UNIQ, (a), (b)) #define __my_macro(uniqa, uniqb, a, b) ({ typeof(a) UNIQ_T(A, uniqa) = (a); typeof(b) UNIQ_T(B, uniqb) = (b); MY_UNSAFE_MACRO(UNIQ_T(A, uniqa), UNIQ_T(B, uniqb)); }) This way, MY_UNSAFE_MACRO() can safely evaluate it's arguments multiple times as they are local variables. But you can also stack invocations to the macro my_macro() without clashing names. This is the same as if you did: #define my_macro(a, b) __max_macro(__COUNTER__, __COUNTER__, (a), (b)) #define __my_macro(prefixa, prefixb, a, b) ({ typeof(a) CONCATENATE(A, prefixa) = (a); typeof(b) CONCATENATE(B, prefixb) = (b); MY_UNSAFE_MACRO(CONCATENATE(A, prefixa), CONCATENATE(B, prefixb)); }) ...but in my opinion, the first macro is easier to write and read. This patch starts by converting container_of() to use this new helper. Other macros may follow (like MIN, MAX, CLAMP, ...).
2014-08-27shared: drop UNIQUE()David Herrmann
The UNIQUE() macro works fine if used in un-stacked macros. However, once you stack them like: MAX(MIN(a, b), CLAMP(MAX(c, d), e, f)) you will get warnings due to shadowing other variables. gcc uses the last line of a macro expansion as value for __LINE__, therefore, we cannot even avoid this by splitting the expressions across lines. Remove the only user of UNIQUE() so we introduce a new helper in follow-ups.
2014-08-27systemctl: fix broken list-unit-files with --rootLukas Nykryn
2014-08-26hibernate-resume-generator: add a generator for instantiating the resume unit.Ivan Shapovalov
hibernate-resume-generator understands resume= kernel command line parameter and instantiates the systemd-resume@.service accordingly if it is passed. This enables resume from hibernation using device specified on the kernel command line, and it may be specified either as "/dev/disk/by-foo/bar" or "FOO=bar", not only "/dev/sdXY" which is understood by the in-kernel implementation. So now resume= is brought on par with root= in terms of possible ways to specify a device.
2014-08-26hibernate-resume: add a tool to write a device node's major:minor to ↵Ivan Shapovalov
/sys/power/resume. This can be used to initiate a resume from hibernation by path to a swap device containing the hibernation image. The respective templated unit is also added. It is instantiated using path to the desired resume device.