2016-07-12 19:56:50 +01:00
|
|
|
{ stdenv, fetchurl, fetchpatch, pkgs }:
|
2009-12-14 15:28:55 +00:00
|
|
|
|
|
|
|
let
|
|
|
|
|
2011-03-21 15:53:22 +00:00
|
|
|
makeTuxonicePatch = { version, kernelVersion, sha256,
|
2013-11-19 20:36:55 +00:00
|
|
|
url ? "http://tuxonice.nigelcunningham.com.au/downloads/all/tuxonice-for-linux-${kernelVersion}-${version}.patch.bz2" }:
|
2011-03-21 15:53:22 +00:00
|
|
|
{ name = "tuxonice-${kernelVersion}";
|
|
|
|
patch = stdenv.mkDerivation {
|
|
|
|
name = "tuxonice-${version}-for-${kernelVersion}.patch";
|
|
|
|
src = fetchurl {
|
|
|
|
inherit url sha256;
|
|
|
|
};
|
|
|
|
phases = [ "installPhase" ];
|
|
|
|
installPhase = ''
|
|
|
|
source $stdenv/setup
|
|
|
|
bunzip2 -c $src > $out
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2017-02-06 14:47:20 +00:00
|
|
|
grsecPatch = { grbranch ? "test", grver ? "3.1", kver, grrev, sha512 }: rec {
|
grsecurity: implement a single NixOS kernel
This patch replaces the old grsecurity kernels with a single NixOS
specific grsecurity kernel. This kernel is intended as a general
purpose kernel, tuned for casual desktop use.
Providing only a single kernel may seem like a regression compared to
offering a multitude of flavors. It is impossible, however, to
effectively test and support that many options. This is amplified by
the reality that very few seem to actually use grsecurity on NixOS,
meaning that bugs go unnoticed for long periods of time, simply because
those code paths end up never being exercised. More generally, it is
hopeless to anticipate imagined needs. It is better to start from a
solid foundation and possibly add more flavours on demand.
While the generic kernel is intended to cover a wide range of use cases,
it cannot cover everything. For some, the configuration will be either
too restrictive or too lenient. In those cases, the recommended
solution is to build a custom kernel --- this is *strongly* recommended
for security sensitive deployments.
Building a custom grsec kernel should be as simple as
```nix
linux_grsec_nixos.override {
extraConfig = ''
GRKERNSEC y
PAX y
# and so on ...
'';
}
```
The generic kernel should be usable both as a KVM guest and host. When
running as a host, the kernel assumes hardware virtualisation support.
Virtualisation systems other than KVM are *unsupported*: users of
non-KVM systems are better served by compiling a custom kernel.
Unlike previous Grsecurity kernels, this configuration disables `/proc`
restrictions in favor of `security.hideProcessInformation`.
Known incompatibilities:
- ZFS: can't load spl and zfs kernel modules; claims incompatibility
with KERNEXEC method `or` and RAP; changing to `bts` does not fix the
problem, which implies we'd have to disable RAP as well for ZFS to
work
- `kexec()`: likely incompatible with KERNEXEC (unverified)
- Xen: likely incompatible with KERNEXEC and UDEREF (unverified)
- Virtualbox: likely incompatible with UDEREF (unverified)
2016-06-13 23:04:56 +01:00
|
|
|
name = "grsecurity-${grver}-${kver}-${grrev}";
|
|
|
|
|
|
|
|
# Pass these along to allow the caller to determine compatibility
|
|
|
|
inherit grver kver grrev;
|
|
|
|
|
|
|
|
patch = fetchurl {
|
2016-12-09 11:10:01 +00:00
|
|
|
urls = [
|
|
|
|
"https://grsecurity.net/${grbranch}/${name}.patch"
|
|
|
|
# When updating versions/hashes, ALWAYS use the official
|
|
|
|
# version; we use this mirror only because upstream removes
|
|
|
|
# source files immediately upon releasing a new version ...
|
2017-01-24 23:47:08 +00:00
|
|
|
"https://raw.githubusercontent.com/slashbeast/grsecurity-scrape/master/${grbranch}/${kver}/${name}.patch"
|
2016-12-09 11:10:01 +00:00
|
|
|
];
|
2017-02-06 14:47:20 +00:00
|
|
|
inherit sha512;
|
2013-05-11 06:44:30 +01:00
|
|
|
};
|
2016-08-29 02:57:47 +01:00
|
|
|
|
|
|
|
features.grsecurity = true;
|
grsecurity: implement a single NixOS kernel
This patch replaces the old grsecurity kernels with a single NixOS
specific grsecurity kernel. This kernel is intended as a general
purpose kernel, tuned for casual desktop use.
Providing only a single kernel may seem like a regression compared to
offering a multitude of flavors. It is impossible, however, to
effectively test and support that many options. This is amplified by
the reality that very few seem to actually use grsecurity on NixOS,
meaning that bugs go unnoticed for long periods of time, simply because
those code paths end up never being exercised. More generally, it is
hopeless to anticipate imagined needs. It is better to start from a
solid foundation and possibly add more flavours on demand.
While the generic kernel is intended to cover a wide range of use cases,
it cannot cover everything. For some, the configuration will be either
too restrictive or too lenient. In those cases, the recommended
solution is to build a custom kernel --- this is *strongly* recommended
for security sensitive deployments.
Building a custom grsec kernel should be as simple as
```nix
linux_grsec_nixos.override {
extraConfig = ''
GRKERNSEC y
PAX y
# and so on ...
'';
}
```
The generic kernel should be usable both as a KVM guest and host. When
running as a host, the kernel assumes hardware virtualisation support.
Virtualisation systems other than KVM are *unsupported*: users of
non-KVM systems are better served by compiling a custom kernel.
Unlike previous Grsecurity kernels, this configuration disables `/proc`
restrictions in favor of `security.hideProcessInformation`.
Known incompatibilities:
- ZFS: can't load spl and zfs kernel modules; claims incompatibility
with KERNEXEC method `or` and RAP; changing to `bts` does not fix the
problem, which implies we'd have to disable RAP as well for ZFS to
work
- `kexec()`: likely incompatible with KERNEXEC (unverified)
- Xen: likely incompatible with KERNEXEC and UDEREF (unverified)
- Virtualbox: likely incompatible with UDEREF (unverified)
2016-06-13 23:04:56 +01:00
|
|
|
};
|
2009-12-14 15:28:55 +00:00
|
|
|
in
|
|
|
|
|
2011-07-11 14:59:40 +01:00
|
|
|
rec {
|
2009-12-14 15:28:55 +00:00
|
|
|
|
2016-12-13 12:25:46 +00:00
|
|
|
multithreaded_rsapubkey =
|
|
|
|
{
|
|
|
|
name = "multithreaded-rsapubkey-asn1.patch";
|
|
|
|
patch = ./multithreaded-rsapubkey-asn1.patch;
|
|
|
|
};
|
|
|
|
|
2015-01-13 23:49:14 +00:00
|
|
|
bridge_stp_helper =
|
|
|
|
{ name = "bridge-stp-helper";
|
|
|
|
patch = ./bridge-stp-helper.patch;
|
|
|
|
};
|
|
|
|
|
2010-07-18 22:10:46 +01:00
|
|
|
no_xsave =
|
|
|
|
{ name = "no-xsave";
|
2012-07-02 15:16:27 +01:00
|
|
|
patch = ./no-xsave.patch;
|
2010-07-18 22:10:46 +01:00
|
|
|
features.noXsave = true;
|
2010-06-20 21:52:08 +01:00
|
|
|
};
|
2010-07-25 13:15:59 +01:00
|
|
|
|
2012-06-16 11:49:03 +01:00
|
|
|
mips_fpureg_emu =
|
|
|
|
{ name = "mips-fpureg-emulation";
|
|
|
|
patch = ./mips-fpureg-emulation.patch;
|
|
|
|
};
|
|
|
|
|
|
|
|
mips_fpu_sigill =
|
|
|
|
{ name = "mips-fpu-sigill";
|
|
|
|
patch = ./mips-fpu-sigill.patch;
|
|
|
|
};
|
|
|
|
|
2012-11-05 23:16:13 +00:00
|
|
|
mips_ext3_n32 =
|
|
|
|
{ name = "mips-ext3-n32";
|
|
|
|
patch = ./mips-ext3-n32.patch;
|
|
|
|
};
|
|
|
|
|
2016-08-30 05:26:12 +01:00
|
|
|
modinst_arg_list_too_long =
|
|
|
|
{ name = "modinst-arglist-too-long";
|
|
|
|
patch = ./modinst-arg-list-too-long.patch;
|
|
|
|
};
|
|
|
|
|
2016-04-10 00:36:02 +01:00
|
|
|
ubuntu_fan_4_4 =
|
2015-08-10 00:13:40 +01:00
|
|
|
{ name = "ubuntu-fan";
|
2016-04-10 00:36:02 +01:00
|
|
|
patch = ./ubuntu-fan-4.4.patch;
|
2015-08-10 00:13:40 +01:00
|
|
|
};
|
|
|
|
|
2015-09-25 22:42:16 +01:00
|
|
|
ubuntu_unprivileged_overlayfs =
|
|
|
|
{ name = "ubuntu-unprivileged-overlayfs";
|
|
|
|
patch = ./ubuntu-unprivileged-overlayfs.patch;
|
|
|
|
};
|
|
|
|
|
2013-11-19 20:36:55 +00:00
|
|
|
tuxonice_3_10 = makeTuxonicePatch {
|
|
|
|
version = "2013-11-07";
|
|
|
|
kernelVersion = "3.10.18";
|
|
|
|
sha256 = "00b1rqgd4yr206dxp4mcymr56ymbjcjfa4m82pxw73khj032qw3j";
|
|
|
|
};
|
|
|
|
|
grsecurity: implement a single NixOS kernel
This patch replaces the old grsecurity kernels with a single NixOS
specific grsecurity kernel. This kernel is intended as a general
purpose kernel, tuned for casual desktop use.
Providing only a single kernel may seem like a regression compared to
offering a multitude of flavors. It is impossible, however, to
effectively test and support that many options. This is amplified by
the reality that very few seem to actually use grsecurity on NixOS,
meaning that bugs go unnoticed for long periods of time, simply because
those code paths end up never being exercised. More generally, it is
hopeless to anticipate imagined needs. It is better to start from a
solid foundation and possibly add more flavours on demand.
While the generic kernel is intended to cover a wide range of use cases,
it cannot cover everything. For some, the configuration will be either
too restrictive or too lenient. In those cases, the recommended
solution is to build a custom kernel --- this is *strongly* recommended
for security sensitive deployments.
Building a custom grsec kernel should be as simple as
```nix
linux_grsec_nixos.override {
extraConfig = ''
GRKERNSEC y
PAX y
# and so on ...
'';
}
```
The generic kernel should be usable both as a KVM guest and host. When
running as a host, the kernel assumes hardware virtualisation support.
Virtualisation systems other than KVM are *unsupported*: users of
non-KVM systems are better served by compiling a custom kernel.
Unlike previous Grsecurity kernels, this configuration disables `/proc`
restrictions in favor of `security.hideProcessInformation`.
Known incompatibilities:
- ZFS: can't load spl and zfs kernel modules; claims incompatibility
with KERNEXEC method `or` and RAP; changing to `bts` does not fix the
problem, which implies we'd have to disable RAP as well for ZFS to
work
- `kexec()`: likely incompatible with KERNEXEC (unverified)
- Xen: likely incompatible with KERNEXEC and UDEREF (unverified)
- Virtualbox: likely incompatible with UDEREF (unverified)
2016-06-13 23:04:56 +01:00
|
|
|
grsecurity_testing = grsecPatch
|
2017-03-31 23:06:52 +01:00
|
|
|
{ kver = "4.9.20";
|
|
|
|
grrev = "201703310823";
|
|
|
|
sha512 = "0pm3wmcip73imjjx13yar5l5bhpii45mjac5vb1snypmbwqmywmikiixqslq84i1yqw0c8pi822znkz7650dhxrmdmagy0yirwfdrhf";
|
2016-05-02 06:06:36 +01:00
|
|
|
};
|
|
|
|
|
grsecurity: implement a single NixOS kernel
This patch replaces the old grsecurity kernels with a single NixOS
specific grsecurity kernel. This kernel is intended as a general
purpose kernel, tuned for casual desktop use.
Providing only a single kernel may seem like a regression compared to
offering a multitude of flavors. It is impossible, however, to
effectively test and support that many options. This is amplified by
the reality that very few seem to actually use grsecurity on NixOS,
meaning that bugs go unnoticed for long periods of time, simply because
those code paths end up never being exercised. More generally, it is
hopeless to anticipate imagined needs. It is better to start from a
solid foundation and possibly add more flavours on demand.
While the generic kernel is intended to cover a wide range of use cases,
it cannot cover everything. For some, the configuration will be either
too restrictive or too lenient. In those cases, the recommended
solution is to build a custom kernel --- this is *strongly* recommended
for security sensitive deployments.
Building a custom grsec kernel should be as simple as
```nix
linux_grsec_nixos.override {
extraConfig = ''
GRKERNSEC y
PAX y
# and so on ...
'';
}
```
The generic kernel should be usable both as a KVM guest and host. When
running as a host, the kernel assumes hardware virtualisation support.
Virtualisation systems other than KVM are *unsupported*: users of
non-KVM systems are better served by compiling a custom kernel.
Unlike previous Grsecurity kernels, this configuration disables `/proc`
restrictions in favor of `security.hideProcessInformation`.
Known incompatibilities:
- ZFS: can't load spl and zfs kernel modules; claims incompatibility
with KERNEXEC method `or` and RAP; changing to `bts` does not fix the
problem, which implies we'd have to disable RAP as well for ZFS to
work
- `kexec()`: likely incompatible with KERNEXEC (unverified)
- Xen: likely incompatible with KERNEXEC and UDEREF (unverified)
- Virtualbox: likely incompatible with UDEREF (unverified)
2016-06-13 23:04:56 +01:00
|
|
|
# This patch relaxes grsec constraints on the location of usermode helpers,
|
|
|
|
# e.g., modprobe, to allow calling into the Nix store.
|
|
|
|
grsecurity_nixos_kmod =
|
|
|
|
{
|
|
|
|
name = "grsecurity-nixos-kmod";
|
|
|
|
patch = ./grsecurity-nixos-kmod.patch;
|
2016-05-02 06:06:36 +01:00
|
|
|
};
|
|
|
|
|
2015-02-10 12:45:20 +00:00
|
|
|
crc_regression =
|
|
|
|
{ name = "crc-backport-regression";
|
|
|
|
patch = ./crc-regression.patch;
|
|
|
|
};
|
2015-04-08 13:13:42 +01:00
|
|
|
|
2016-01-10 19:07:45 +00:00
|
|
|
genksyms_fix_segfault =
|
|
|
|
{ name = "genksyms-fix-segfault";
|
|
|
|
patch = ./genksyms-fix-segfault.patch;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2016-01-10 19:10:11 +00:00
|
|
|
chromiumos_Kconfig_fix_entries_3_14 =
|
|
|
|
{ name = "Kconfig_fix_entries_3_14";
|
|
|
|
patch = ./chromiumos-patches/fix-double-Kconfig-entry-3.14.patch;
|
|
|
|
};
|
|
|
|
|
2016-01-10 19:07:45 +00:00
|
|
|
chromiumos_Kconfig_fix_entries_3_18 =
|
|
|
|
{ name = "Kconfig_fix_entries_3_18";
|
|
|
|
patch = ./chromiumos-patches/fix-double-Kconfig-entry-3.18.patch;
|
|
|
|
};
|
|
|
|
|
|
|
|
chromiumos_no_link_restrictions =
|
|
|
|
{ name = "chromium-no-link-restrictions";
|
|
|
|
patch = ./chromiumos-patches/no-link-restrictions.patch;
|
|
|
|
};
|
2016-01-10 19:10:11 +00:00
|
|
|
|
|
|
|
chromiumos_mfd_fix_dependency =
|
|
|
|
{ name = "mfd_fix_dependency";
|
|
|
|
patch = ./chromiumos-patches/mfd-fix-dependency.patch;
|
|
|
|
};
|
2016-07-12 19:56:50 +01:00
|
|
|
|
|
|
|
hiddev_CVE_2016_5829 =
|
|
|
|
{ name = "hiddev_CVE_2016_5829";
|
|
|
|
patch = fetchpatch {
|
|
|
|
url = "https://sources.debian.net/data/main/l/linux/4.6.3-1/debian/patches/bugfix/all/HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch";
|
|
|
|
sha256 = "14rm1qr87p7a5prz8g5fwbpxzdp3ighj095x8rvhm8csm20wspyy";
|
|
|
|
};
|
|
|
|
};
|
2016-08-25 18:01:40 +01:00
|
|
|
|
|
|
|
cpu-cgroup-v2 = import ./cpu-cgroup-v2-patches;
|
2016-09-28 17:45:55 +01:00
|
|
|
|
|
|
|
lguest_entry-linkage =
|
|
|
|
{ name = "lguest-asmlinkage.patch";
|
|
|
|
patch = fetchpatch {
|
|
|
|
url = "https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git"
|
|
|
|
+ "/patch/drivers/lguest/x86/core.c?id=cdd77e87eae52";
|
|
|
|
sha256 = "04xlx6al10cw039av6jkby7gx64zayj8m1k9iza40sw0fydcfqhc";
|
2016-12-10 16:08:42 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
packet_fix_race_condition_CVE_2016_8655 =
|
|
|
|
{ name = "packet_fix_race_condition_CVE_2016_8655.patch";
|
|
|
|
patch = fetchpatch {
|
|
|
|
url = "https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=84ac7260236a49c79eede91617700174c2c19b0c";
|
|
|
|
sha256 = "19viqjjgq8j8jiz5yhgmzwhqvhwv175q645qdazd1k69d25nv2ki";
|
|
|
|
};
|
2016-09-28 17:45:55 +01:00
|
|
|
};
|
2016-12-26 13:56:15 +00:00
|
|
|
|
|
|
|
panic_on_icmp6_frag_CVE_2016_9919 = rec
|
|
|
|
{ name = "panic_on_icmp6_frag_CVE_2016_9919.patch";
|
|
|
|
patch = fetchpatch {
|
|
|
|
inherit name;
|
|
|
|
url = "https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=79dc7e3f1cd323be4c81aa1a94faa1b3ed987fb2";
|
|
|
|
sha256 = "0mps33r4mnwiy0bmgrzgqkrk59yya17v6kzpv9024g4xlz61rk8p";
|
|
|
|
};
|
|
|
|
};
|
2017-02-24 00:23:29 +00:00
|
|
|
|
|
|
|
DCCP_double_free_vulnerability_CVE-2017-6074 = rec
|
|
|
|
{ name = "DCCP_double_free_vulnerability_CVE-2017-6074.patch";
|
|
|
|
patch = fetchpatch {
|
|
|
|
inherit name;
|
|
|
|
url = "https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=5edabca9d4cff7f1f2b68f0bac55ef99d9798ba4";
|
|
|
|
sha256 = "10dmv3d3gj8rvj9h40js4jh8xbr5wyaqiy0kd819mya441mj8ll2";
|
|
|
|
};
|
|
|
|
};
|
2009-12-14 15:28:55 +00:00
|
|
|
}
|