Subject: Re: [vserver] linux 3.10.5[56] and patch-3.10.53-vs2.3.6.8.diff
From: Corey Wright <undefined@pobox.com>
Date: Mon, 6 Oct 2014 00:41:24 -0500
Mon, 6 Oct 2014 00:41:24 -0500
On Fri, 19 Sep 2014 01:07:55 -0500
Corey Wright <undefined@pobox.com> wrote:

> applying patch-3.10.53-vs2.3.6.8.diff to linux 3.10.55 fails in both patching
> and testing/functionality.

linux 3.10.56 and patch-3.10.53-vs2.3.6.8.diff fails, too.

> the upstream addition of including "linux/hash.h" in "fs/namei.c" [1]
> invalidated the patch hunk context.
> 
> patching file fs/namei.c
> Hunk #1 FAILED at 34.
> Hunk #2 succeeded at 267 (offset 1 line).
> Hunk #3 succeeded at 473 (offset 1 line).
> Hunk #4 succeeded at 1327 (offset 1 line).
> Hunk #5 succeeded at 1473 (offset 1 line).
> Hunk #6 succeeded at 1506 (offset 1 line).
> 1 out of 16 hunks FAILED -- saving rejects to file fs/namei.c.rej
> 
> [1] https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-3.10.y&id=d4c96061fddd129778ce8b70fb093aa532f422d0
> 
> the upstream change of masking all capabilities above CAP_LAST_CAP (which the
> linux-vserver patch does not adjust to account for its own CAP_CONTEXT)
> breaks changing/manipulating contexts.
> 
> # vserver-info | grep V
> 
> Assumed 'SYSINFO' as no other option given; try '--help' for more information.
> Versions:
>                    VS-API: ???
>                       VCI: ???
> # chcontext --xid 1 -- true
> chcontext: vc_new_s_context(): Function not implemented
> 
> [2] https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-3.10.y&id=76f01555c78e496203105bd29b878db3431a2260
> 
> the attached patch accounts for the change in patch hunk context.  reverting
> the upstream commit accounts for the masking of CAP_CONTEXT.

instead of reverting the upstream change, the attached patch accounts for the
masking of CAP_CONTEXT.  the patch also fixes the Makefile reject and
increments the vserver version (ie "2.3.6.9"; not so much due to the size of
the change, but due to technicalities).

> instructions:
> 1. acquire linux-3.10.55
> 2. apply patch-3.10.53-vs2.3.6.8
> 3. revert upstream git commit 76f0155
>   a. wget -Nv --content-disposition https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/patch/?id=76f01555c78e496203105bd29b878db3431a2260
> b. patch -R <d4281c33c1086d80b2a5e3cd6081752e75795833..76f01555c78e496203105bd29b878db3431a2260.patch
> 4. apply the attached patch-3.10.53-55-vs2.3.6.8.diff
> 5. manually fix the Makefile reject (EXTRAVERSION)

1. acquire linux-3.10.56
2. apply patch-3.10.53-vs2.3.6.8
3. apply the previously attached patch-3.10.53-55-vs2.3.6.8.diff [0]
4. apply the attached patch-3.10.53-56-vs2.3.6.9.diff

[0]
http://archives.linux-vserver.org/201409/att-0005/patch-3.10.53-55-vs2.3.6.8.diff

> i've successfully built the resulting kernel and tested it in virtualbox
> against testme.sh and testfs.sh and started-entered-exited-stopped a vserver
> guest.

specific to the capabilities fix, i also tested "vserver-info | grep V" and
"chcontext --xid 1 -- true"; see above, in previous email, for failure
details.

> i figure in time herbert will release an updated kernel patch that addresses
> the upstream change in capability masking (though i have a few ideas of my
> own, but this upstream change is immaterial enough that it's easier to just
> revert it for now).

we can't revert forever, so i made the attached patch with input from herbert
and daniel (i'll take the blame and they can have the credit ;).

corey
--
undefined@pobox.com

> corey
> --
> undefined@pobox.com


upstream addition of masking all capabilities above CAP_LAST_CAP did not account for
linux-vserver CAP_CONTEXT

https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-3.10.y&id=76f01555c78e496203105bd29b878db3431a2260

diff -urNpd linux-3.10.56-vs2.3.6.9~/include/linux/capability.h linux-3.10.56-vs2.3.6.9/include/linux/capability.h
--- linux-3.10.56-vs2.3.6.9~/include/linux/capability.h	2014-09-18 12:28:39.000000000
-0500
+++ linux-3.10.56-vs2.3.6.9/include/linux/capability.h	2014-10-05 23:00:59.000000000
-0500
@@ -79,7 +79,8 @@ extern const kernel_cap_t __cap_init_eff
 #else /* HAND-CODED capability initializers */
 
 #define CAP_LAST_U32			((_KERNEL_CAPABILITY_U32S) - 1)
-#define CAP_LAST_U32_VALID_MASK		(CAP_TO_MASK(CAP_LAST_CAP + 1) -1)
+#define CAP_LAST_U32_VALID_MASK		((CAP_TO_MASK(CAP_LAST_CAP + 1) -1) \
+					| CAP_TO_MASK(CAP_CONTEXT))
 
 # define CAP_EMPTY_SET    ((kernel_cap_t){{ 0, 0 }})
 # define CAP_FULL_SET     ((kernel_cap_t){{ ~0, CAP_LAST_U32_VALID_MASK }})
diff -urNpd linux-3.10.56-vs2.3.6.9~/Makefile linux-3.10.56-vs2.3.6.9/Makefile
--- linux-3.10.56-vs2.3.6.9~/Makefile	2014-10-05 23:06:23.000000000 -0500
+++ linux-3.10.56-vs2.3.6.9/Makefile	2014-10-05 22:51:58.000000000 -0500
@@ -1,7 +1,7 @@
 VERSION = 3
 PATCHLEVEL = 10
 SUBLEVEL = 56
-EXTRAVERSION =
+EXTRAVERSION = -vs2.3.6.9
 NAME = TOSSUG Baby Fish
 
 # *DOCUMENTATION*