aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* kernel: really select kernel 4.4.71Hauke Mehrtens2017-06-071-1/+1
| | | | | | | The previous commit f4a4f324cb76ad ("kernel: update kernel 4.4 to 4.4.71") missed the line which changes the kernel version, add it now. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
* kernel: update kernel 4.4 to 4.4.71Jo-Philipp Wich2017-06-076-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes the following security vulnerabilities: CVE-2017-8890 The inet_csk_clone_lock function in net/ipv4/inet_connection_sock.c in the Linux kernel through 4.10.15 allows attackers to cause a denial of service (double free) or possibly have unspecified other impact by leveraging use of the accept system call. CVE-2017-9074 The IPv6 fragmentation implementation in the Linux kernel through 4.11.1 does not consider that the nexthdr field may be associated with an invalid option, which allows local users to cause a denial of service (out-of-bounds read and BUG) or possibly have unspecified other impact via crafted socket and send system calls. CVE-2017-9075 The sctp_v6_create_accept_sk function in net/sctp/ipv6.c in the Linux kernel through 4.11.1 mishandles inheritance, which allows local users to cause a denial of service or possibly have unspecified other impact via crafted system calls, a related issue to CVE-2017-8890. CVE-2017-9076 The dccp_v6_request_recv_sock function in net/dccp/ipv6.c in the Linux kernel through 4.11.1 mishandles inheritance, which allows local users to cause a denial of service or possibly have unspecified other impact via crafted system calls, a related issue to CVE-2017-8890. CVE-2017-9077 The tcp_v6_syn_recv_sock function in net/ipv6/tcp_ipv6.c in the Linux kernel through 4.11.1 mishandles inheritance, which allows local users to cause a denial of service or possibly have unspecified other impact via crafted system calls, a related issue to CVE-2017-8890. CVE-2017-9242 The __ip6_append_data function in net/ipv6/ip6_output.c in the Linux kernel through 4.11.3 is too late in checking whether an overwrite of an skb data structure may occur, which allows local users to cause a denial of service (system crash) via crafted system calls. Ref: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8890 Ref: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9074 Ref: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9075 Ref: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9076 Ref: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9077 Ref: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9242 Ref: https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.71 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
* automake: import upstream fix for perl 5.26Daniel Golle2017-06-071-0/+30
| | | | | | | | Build broke as distributions now include Perl 5.26 and automake triggered an "Unescaped left brace in regex" error. Import upstream commit 13f00eb449 to fix that. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* gdb: disable simulator ; it's broken on ppcAlexandru Ardelean2017-06-071-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Error is: ``` ompile-loc2c.o compile-c-support.o inflow.o init.o \ ../sim/ppc/libsim.a -lreadline ../opcodes/libopcodes.a ../bfd/libbfd.a -L./../zlib -lz ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a -lncurses -lm ../libiberty/libiberty.a build-gnulib/import/libgnu.a -ldl -Wl,--dynamic-list=./proc-service.list ../sim/ppc/libsim.a(idecode.o): In function `update_time_from_event': idecode.c:(.text+0x170): undefined reference to `error' ../sim/ppc/libsim.a(idecode.o): In function `event_queue_tick': idecode.c:(.text+0x1cc): undefined reference to `error' idecode.c:(.text+0x28c): undefined reference to `error' idecode.c:(.text+0x318): undefined reference to `error' ../sim/ppc/libsim.a(idecode.o): In function `cpu_halt.constprop.6': idecode.c:(.text+0x398): undefined reference to `error' ../sim/ppc/libsim.a(idecode.o):idecode.c:(.text+0x4e4): more undefined references to `error' follow collect2: error: ld returned 1 exit status Makefile:1420: recipe for target 'gdb' failed make[5]: *** [gdb] Error 1 ``` Seems others are running into this as well. The problem seems to be that some code may be built as C++ and not C, which may explain the linker error. On this thread reply: https://sourceware.org/ml/gdb/2016-11/msg00045.html it mentions that the simulator should not call GDB's "error" function directly, but rather use the "host_callback" struct. I have no idea about the use of the GDB simulator within the OpenWrt/LEDE community. So, I took the easier route, which is to disable the simulator. (Also suggested here: https://sourceware.org/ml/gdb/2016-11/msg00047.html ) If needed, I can make an effort to fix the simulator for PPC. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
* gdb: remove Build/Compile rule ; default one worksAlexandru Ardelean2017-06-071-7/+0
| | | | Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
* kernel: remove CONFIG_ZONE_DMA_FLAG from 4.9Sergey Ryazanov2017-06-071-1/+0
| | | | | | There are no CONFIG_ZONE_DMA_FLAG config symbol since 4.7. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* kernel: disable CONFIG_SG_POOL by defaultSergey Ryazanov2017-06-0725-16/+10
| | | | | | | | CONFIG_SG_POOL symbol is selected only by CONFIG_SCSI, since the last one is disabled by default then disable CONFIG_SG_POOL by default too. And explicitly enable it only for platforms that use CONFIG_SCSI. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* ath25: add missed HAVE_IRQ_EXIT_ON_IRQ_STACKSergey Ryazanov2017-06-071-0/+1
| | | | | | | Add HAVE_IRQ_EXIT_ON_IRQ_STACK kernel configuration symbol that was missed during backporting separate IRQ stack for MIPS from upstream. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* rb532: enable high-res timers, refresh kernel configFelix Fietkau2017-06-071-2/+1
| | | | Signed-off-by: Felix Fietkau <nbd@nbd.name>
* xburst: enable high-res timers, refresh kernel configFelix Fietkau2017-06-071-7/+3
| | | | | | Helps with system performance Signed-off-by: Felix Fietkau <nbd@nbd.name>
* octeon: enable high-res timersFelix Fietkau2017-06-071-2/+0
| | | | | | Helps with network stack performance Signed-off-by: Felix Fietkau <nbd@nbd.name>
* kernel: add CONFIG_SCHED_HRTICK=y to the generic configFelix Fietkau2017-06-072-0/+2
| | | | | | It is used by pretty much every target Signed-off-by: Felix Fietkau <nbd@nbd.name>
* package/grub2: update to 2.02Alif M. Ahmad2017-06-071-6/+3
| | | | | | Update to version 2.02 Signed-off-by: Alif M. Ahmad <alive4ever@live.com>
* x86: include USB HID by defaultLucian Cristian2017-06-071-0/+3
| | | | Signed-off-by: Lucian Cristian <lucian.cristian@gmail.com>
* kernel: fix segmentation fault in mconf on linuxFelix Fietkau2017-06-071-1/+3
| | | | | | | | | | | Commit 86c966a8ae9c4e74b912a16a760aaed17c68eb32 caused HOST_LOADLIBES to include -lncurses. This was added for fixing build issues on macOS. This introduces issues on Linux when wide-character ncurses is being used for compiling, but the non-wide-character version is linked in. Fix this by adding the extra override for HOST_LOADLIBES only on macOS. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mac80211: use KERNEL_MAKEOPTSFelix Fietkau2017-06-072-6/+12
| | | | Signed-off-by: Felix Fietkau <nbd@nbd.name>
* build: add KERNEL_MAKE and KERNEL_MAKE_FLAGS variables and move to kernel.mkFelix Fietkau2017-06-075-33/+37
| | | | | | | | This allows packages to use kernel make options without the forced -C $(LINUX_DIR). It also makes it more clear that it to be called from kernel module packages directly. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* kernel: update myloader for linux 4.9Sergey Ryazanov2017-06-073-1/+23
| | | | | | add backport patches for older kernels. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* ip17xx: correct aneg_done return valueSergey Ryazanov2017-06-071-1/+1
| | | | | | | | | PHY core treats any positive return value as the auto-negotiation done indication. Since we do not actually check any device register in this callback then update it to return positive value with a neutral meaning instead of the register flag to avoid confusing for future readers. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* mvswitch: fix autonegotiation issueSergey Ryazanov2017-06-071-0/+7
| | | | | | | | | | | | | | | The Marvel 88E6060 switch has an MDIO interface, but does not emulate regular PHY behavior for the host. The network core can not detect using the generic code, whether the connection via the attached PHY can be used or not. The PHY's state machine is stuck in a state of auto-negotiation and does not go any further so the Ethernet interface of the router stay forever in the not-runing state. Fix this issue by implementing the aneg_done callback to be able to inform the network core that the Ethernet interface link to which the switch is connected can be marked as RUNNING. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* linux/ath25: fixing some tabs and whitespaceSven Roederer2017-06-071-3/+3
| | | | Signed-off-by: Sven Roederer <devel-sven@geroedel.de>
* ath25: drop 4.4 kernel supportSergey Ryazanov2017-06-0712-3923/+0
| | | | Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* ath25: switch to 4.9 kernelSergey Ryazanov2017-06-071-1/+1
| | | | Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* ath25: 4.9: fix Ethernet link autonegotiationSergey Ryazanov2017-06-072-116/+50
| | | | | | | | | | | | | | Drop the own PHY polling function and switch to using the kernel PHY state machine. This change allows driver to work correctly with devices that do not support PHY behaviour but whose driver could emulate autonegotiation completion (e.g. MV88E6060 and IP17xx switches). NB: earlier this driver rely on flaws in PHY core code and could use PHY device without really starting it. But now (at least in kernel 4.9) this trick no more work and network interface could stuck in not-running state. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* ath25: 4.9: fix Ethernet tiny issuesSergey Ryazanov2017-06-071-15/+7
| | | | | | | | | | | | Few tiny fixes for issues caused by changes in the upstream: - do not touch PHY IRQ array (core code initializes it itself now) - add missed SET_NETDEV_DEV() invocation (causes segfault during phy connection) - use phy API inside the MDIO probe function instead of direct field access (consider phy structure changes in upstream and prevent similar issues in the future) Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* ath25: 4.9: fix GPIO compile issuesSergey Ryazanov2017-06-072-2/+2
| | | | | | Consider renaming the dev field to parent in the upstream. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* ath25: add preliminary kernel 4.9 supportSergey Ryazanov2017-06-0712-0/+3924
| | | | | | Copy and refresh patches and config from 4.4 Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
* ramips: add support for Ubiquiti EdgeRouter X-SFPSven Roederer2017-06-078-105/+179
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds support for the Ubiquiti EdgeRouter X-SFP and improves support for the EdgeRouter X (PoE-passthrough). Specification: - SoC: MediaTek MT7621AT - Flash: 256 MiB - RAM: 265 MiB - Ethernet: 5 x LAN (1000 Mbps) - UART: 1 x UART on PCB (3.3V, RX, TX, GND) - 57600 8N1 - EdgeRouter X: - 1 x PoE-Passtrough (Eth4) - powered by Wallwart or passive PoE - EdgeRouter X-SFP: - 5 x PoE-Out (24V, passive) - 1 x SFP (unknown status) - powered by Wallwart (24V) Doesn't work: * SoC has crypto engine but no open driver. * SoC has nat acceleration, but no open driver. * This router has 2MB spi flash soldered in but MT nand/spi drivers do not support pin sharing, so it is not accessable and disabled. Stock firmware could read it and it was empty. Installation via vendor firmware: - build an Initrd-image (> 3MiB) and upload the factory-image - initrd can have luci-mod-failsafe - flash final firmware via LuCI / sysupgrade on rebooted system via TFTP: - stop uboot into tftp-load into option "1" - upload factory.bin image Signed-off-by: Sven Roederer <devel-sven@geroedel.de>
* ipq806x: Enable ubi image for ipq40xx AP-DK04.1-C1 boardRam Chandra Jangir2017-06-072-1/+15
| | | | | | | | | | | | | | This change add IPQ40xx AP-DK04.1-C1 board image support, enables ubi image for IPQ40xx AP-DK04.1-C1 board and also add sysupgrage support for AP-DK04.1-C1 and generates a sysupgrade.tar image. Testing: *Tested on IPQ40xx AP-DK04.1-C1: a. NAND boot b. ubi sysupgrade Signed-off-by: Ram Chandra Jangir <rjangir@codeaurora.org>
* ipq806x: Updated various ipq40xx pin definitionsRam Chandra Jangir2017-06-071-0/+1332
| | | | | | | This change populates default values for various GPIO functions in ipq40xx pinctrl driver. Signed-off-by: Ram Chandra Jangir <rjangir@codeaurora.org>
* Add missing APU1 reference to x86 board.dKristian Evensen2017-06-062-2/+2
| | | | | | | | | | | | x86 board.d only contains a case for the APU2, not the APU1. This causes, for example, network configuration not to be created correctly. Even though the APU1 seems to reaching EOL, there a still a lot of them out there. The APU1 and APU2 is configured in the same way and this patch should also be considered for stable, as the error also exists there. Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
* perf: Depend on KERNEL_PERF_EVENTSFlorian Fainelli2017-06-051-1/+1
| | | | | | | | | | | | | | | | | | | | The kernel needs to have PERF_EVENTS built otherwise we will run into the following: root@(none):/# perf top perf_event_open(..., PERF_FLAG_FD_CLOEXEC) failed with unexpected error 89 (Function not implemented) perf_event_open(..., 0) failed unexpectedly with error 89 (Function not implemented) Error: The sys_perf_event_open() syscall returned with 89 (Function not implemented) for event (cycles). /bin/dmesg may provide additional information. No CONFIG_PERF_EVENTS=y kernel support configured? Make sure this functional dependency is captured. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
* mdadm: Do not check RUN_DIRFlorian Fainelli2017-06-051-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | Fixes build failure on hosts that do not have mdadm installed/configured: make[3]: Entering directory `/local/users/fainelli/openwrt/trunk/build_dir/target-mipsel-linux-gnu_glibc/mdadm-4.0' ***** Parent of /run/mdadm does not exist. Maybe set different RUN_DIR= ***** e.g. make RUN_DIR=/dev/.mdadm ***** or set CHECK_RUN_DIR=0 make[3]: *** [check_rundir] Error 1 make[3]: Leaving directory `/local/users/fainelli/openwrt/trunk/build_dir/target-mipsel-linux-gnu_glibc/mdadm-4.0' make[2]: *** [/local/users/fainelli/openwrt/trunk/build_dir/target-mipsel-linux-gnu_glibc/mdadm-4.0/.built] Error 2 make[2]: Leaving directory `/local/users/fainelli/openwrt/trunk/package/utils/mdadm' make[1]: *** [package/utils/mdadm/compile] Error 2 make[1]: Leaving directory `/local/users/fainelli/openwrt/trunk' make: *** [package/mdadm/compile] Error 2 Fixes: 980c41f8e04f ("utils/mdadm: Update to 4.0") Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
* brcm63xx: drop support for specifying SPI flash part parsersJonas Gorski2017-06-045-85/+9
| | | | | | No need to keep this since we set them from device-tree. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* brcm63xx: drop support for caldata in brcm63xxpartJonas Gorski2017-06-0410-369/+22
| | | | | | | Now that we always provide these partitions through DT, we don't need to pass their data through parser data from board files anymore. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* brcm63xx: probe SPI flash through DTJonas Gorski2017-06-0418-0/+487
| | | | | | | Now that we support problem the SPI controllers through DT, we can also probe flash through DT. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* brcm63xx: add pflash for remaining pflash equipped boardsJonas Gorski2017-06-0419-0/+210
| | | | Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* brcm63xx: do not require fixed partitions when probing from DTJonas Gorski2017-06-041-1/+1
| | | | | | | | Allow the parser to be invoked from DT without fixed cfe/linux/nvram partitions. This allows flash to be probed from DT also for multi flash-size images. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* brcm63xx: register SPI controllers through DTJonas Gorski2017-06-0426-41/+539
| | | | | | | Register SPI controllers through device tree. We will wire up the clocks at a later stage. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* brcm63xx: backport upstream solution for SPI message size limitsJonas Gorski2017-06-0418-102/+1135
| | | | | | | Backport upstream solution for working around SPI controller maximum message sizes. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* brcm63xx: update flash of_node patches to full patch setJonas Gorski2017-06-0410-2/+920
| | | | | | Fixes missing of_node for SPI flash probed through devicetree. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* brcm63xx: refresh kernel configJonas Gorski2017-06-041-6/+7
| | | | | | Ensure the config is ordered and has all recent symbols. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* build: fix kernel refresh failure on first runJonas Gorski2017-06-041-5/+5
| | | | | | | | Override {HOST_}QUILT before making decisions based on it, else it will cause target/linux/refresh to fail on first run. Fixes: 36ba6237d6e3a23fbeadcc1812a892faa4b07cbe ("build: fix quilt for mixed package/host builds") Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
* lantiq: fix 0008-MIPS-lantiq-backport-old-timer-code.patch for Amazon-SETino Reichardt2017-06-034-6/+18
| | | | | | | | | | | | | The patch 0008 removes the vanilla kernel gptu.c of lantiq. But the replacement file timer.c does not work Amazon-SE and is also protected therefore with an CONFIG_SOC_AMAZON_SE :-) This commit will re-activate the default vanilla kernel code in gptu.c for Amazon-SE. Signed-off-by: Tino Reichardt <milky-lede@mcmilk.de> [refresh patches and add same change for kernel 4.9] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
* lantiq: fix lantiq_mei.c and amazonse.dsti for adsl modem firmwareTino Reichardt2017-06-031-31/+29
| | | | | | | | | | | The ltq-adsl-mei package is used for 3 lantiq device types: danube, amazon-se and ar9. These different SoC's need also different definitions. Signed-off-by: Tino Reichardt <milky-lede@mcmilk.de> [fix LTQ_USB_OC_INT for AR9 to match documentation] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
* lantiq: add Allnet ALL0333CJ supportTino Reichardt2017-06-034-0/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds support for the Allnet ADSL2+ Modem ALL0333CJ. Specifications: - SoC: Amazon-SE - RAM: 16MB - Storage: 4MB NOR FLash - LEDs: Power, Ethernet, DSL (Sync) - Buttons: 1x Reset Button (not currently supported, will be done) - 1x Ethernet-Port: 1x RJ45 10/100BaseTX - 1x WAN-Port: AnnexB & J, G.992.1(ADSL), G.992.3(ADSL2), G.992.5(ADSL2+) Installation: - can be done via telnet+tftp or serial console - default passwords: - via telnet (root:admin) - via webinterface http://172.16.1.254:8235/ (admin:coolwhite) Installation via telnet / tftp: host: # your own host must have an tftpd daemon, then do this: host: ifconfig eth0:172 172.16.1.1 up host: # telnet to allnet modem, root:admin host: telnet 172.16.1.254 modem: # kill this daemon, it spams your console modem: killall dsl_cpe_control modem: # change to some place in ram: modem: cd /ramdisk/tftp_upload modem: # load lede-lantiq-ase-ALL0333CJ-squashfs-sysupgrade.bin alias uImage modem: tftp -g -r uImage 172.16.1.1 modem: # load these extra tools from your tftpd via: modem: # source: https://github.com/mcmilk/uboot-utils/releases/download/0.1/mips32.tar.gz modem: tftp -g -r flashwrite 172.16.1.1 modem: tftp -g -r fw_setenv 172.16.1.1 modem: tftp -g -r fw.conf 172.16.1.1 modem: ln -s fw_setenv fw_printenv modem: chmod +x * modem: ./fw_setenv disable_recovery y modem: ./fw_setenv kernel_addr 0xb0010000 modem: ./flashwrite /dev/mtd/1 uImage 0 Installation via serial line at uboot: uboot: # erase everything exept bootloader uboot: protect on b0000000 +10000; protect on b03f0000 +10000 uboot: erase all uboot: # get new firmware via tftp: uboot: tftpboot 0x80100000 uImage; setenv kernel_addr 0xb0010000 uboot: # copy to flash: uboot: cp.b 0x80100000 $(kernel_addr) $(filesize) uboot: # disable proprietary image checking: uboot: setenv disable_recovery=y; saveenv uboot: # reboot with LEDE ;) uboot: reset Ethernet works as expected, DSL syncronization does not work properly currently, I am working on this issue. Signed-off-by: Tino Reichardt <milky-lede@mcmilk.de>
* lantiq: fix ifxmips_atm_amazon_se.cTino Reichardt2017-06-031-8/+0
| | | | | | Remove 6 defines, which were defined already some lines above. Signed-off-by: Tino Reichardt <milky-lede@mcmilk.de>
* lantiq: enable Netgear DGN1000B image buildTino Reichardt2017-06-031-0/+14
| | | | | | | | | | | Enable the building of Netgear DGN1000B images. I have an example device here, but it was not tested currently. Also WLAN and USB is not ready in the moment. This is just the proper way, so that developing on this device is known to be done in the near future. Signed-off-by: Tino Reichardt <milky-lede@mcmilk.de>
* lantiq: add Amazon-SE subtargetTino Reichardt2017-06-034-1/+56
| | | | | | Re-Add support for the Amazon-SE subtarget on Lantiq. Signed-off-by: Tino Reichardt <milky-lede@mcmilk.de>
* lantiq: fix amazonse.dstiTino Reichardt2017-06-031-3/+15
| | | | | | | Add missing memory@0 and localbus@0 sections. Fix MEI and GPTU interrupt definitions. Signed-off-by: Tino Reichardt <milky-lede@mcmilk.de>