[systemd-devel] [PATCHv2] test: do not use last cap from kernel in test-cap-list

Filipe Brandenburger filbranden at google.com
Mon Dec 22 11:58:30 PST 2014


Ping?

On Fri, Dec 12, 2014 at 10:47 AM, Filipe Brandenburger
<filbranden at google.com> wrote:
> The new test-cap-list introduced in commit 2822da4fb7f891 uses the included
> table of capabilities. However, it uses cap_last_cap() which probes the kernel
> for the last available capability. On an older kernel (e.g. 3.10 from RHEL 7)
> that causes the test to fail with the following message:
>
>     Assertion '!capability_to_name(cap_last_cap()+1)' failed at src/test/test-cap-list.c:30, function main(). Aborting.
>
> Fix it by exporting the size of the static table and using it in the test
> instead of the dynamic one from the current kernel.
>
> Tested by successfully running ./test-cap-list and the whole `make check` test
> suite with this patch on a RHEL 7 host.
>
> v2: Updated the patch to also consider the changes introduced in commit
> 4b7c1d5d6a0060 ("test-cap-list: always check libcap comes to the same names...")
> ---
>  src/shared/cap-list.c    | 4 ++++
>  src/shared/cap-list.h    | 1 +
>  src/test/test-cap-list.c | 7 ++++---
>  3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/src/shared/cap-list.c b/src/shared/cap-list.c
> index 56d1488..8033e8c 100644
> --- a/src/shared/cap-list.c
> +++ b/src/shared/cap-list.c
> @@ -60,3 +60,7 @@ int capability_from_name(const char *name) {
>
>          return sc->id;
>  }
> +
> +int capability_list_length(void) {
> +        return (int) ELEMENTSOF(capability_names);
> +}
> diff --git a/src/shared/cap-list.h b/src/shared/cap-list.h
> index c699e46..9824fad 100644
> --- a/src/shared/cap-list.h
> +++ b/src/shared/cap-list.h
> @@ -23,3 +23,4 @@
>
>  const char *capability_to_name(int id);
>  int capability_from_name(const char *name);
> +int capability_list_length(void);
> diff --git a/src/test/test-cap-list.c b/src/test/test-cap-list.c
> index 238f876..831cdf5 100644
> --- a/src/test/test-cap-list.c
> +++ b/src/test/test-cap-list.c
> @@ -19,6 +19,7 @@
>    along with systemd; If not, see <http://www.gnu.org/licenses/>.
>  ***/
>
> +#include "util.h"
>  #include "log.h"
>  #include "cap-list.h"
>  #include "capability.h"
> @@ -27,9 +28,9 @@ int main(int argc, char *argv[]) {
>          int i;
>
>          assert_se(!capability_to_name(-1));
> -        assert_se(!capability_to_name(cap_last_cap()+1));
> +        assert_se(!capability_to_name(capability_list_length()));
>
> -        for (i = 0; i <= (int) cap_last_cap(); i++) {
> +        for (i = 0; i < capability_list_length(); i++) {
>                  const char *n;
>
>                  assert_se(n = capability_to_name(i));
> @@ -45,7 +46,7 @@ int main(int argc, char *argv[]) {
>          assert_se(capability_from_name("15") == 15);
>          assert_se(capability_from_name("-1") == -EINVAL);
>
> -        for (i = 0; i <= (int) cap_last_cap(); i++) {
> +        for (i = 0; i < capability_list_length(); i++) {
>                  _cleanup_cap_free_charp_ char *a = NULL;
>                  const char *b;
>                  unsigned u;
> --
> 1.8.3.1
>


More information about the systemd-devel mailing list