Message ID | 20201009130052.52409-5-plautrba@redhat.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [v2,1/6] libsepol: Get rid of the old and duplicated symbols | expand |
On Fri, Oct 9, 2020 at 9:48 AM Petr Lautrbach <plautrba@redhat.com> wrote: > > Versioned duplicate symbols cause problems for LTO. These symbols were > introduced during the CIL integration several releases ago and were only > consumed by other SELinux userspace components. > > Related: https://github.com/SELinuxProject/selinux/issues/245 > > Signed-off-by: Petr Lautrbach <plautrba@redhat.com> Acked-by: James Carter <jwcart2@gmail.com> > --- > libsemanage/include/semanage/modules.h | 2 +- > libsemanage/src/libsemanage.map | 5 -- > libsemanage/src/modules.c | 100 +------------------------ > libsemanage/src/modules.h | 9 +-- > libsemanage/src/semanageswig_python.i | 2 - > 5 files changed, 4 insertions(+), 114 deletions(-) > > diff --git a/libsemanage/include/semanage/modules.h b/libsemanage/include/semanage/modules.h > index ac4039314857..b51f61f033d5 100644 > --- a/libsemanage/include/semanage/modules.h > +++ b/libsemanage/include/semanage/modules.h > @@ -33,7 +33,7 @@ typedef struct semanage_module_key semanage_module_key_t; > */ > > extern int semanage_module_install(semanage_handle_t *, > - char *module_data, size_t data_len, char *name, char *ext_lang); > + char *module_data, size_t data_len, const char *name, const char *ext_lang); > extern int semanage_module_install_file(semanage_handle_t *, > const char *module_name); > extern int semanage_module_remove(semanage_handle_t *, char *module_name); > diff --git a/libsemanage/src/libsemanage.map b/libsemanage/src/libsemanage.map > index 1375a8ca0ea7..4bec06aaae27 100644 > --- a/libsemanage/src/libsemanage.map > +++ b/libsemanage/src/libsemanage.map > @@ -167,18 +167,13 @@ LIBSEMANAGE_1.0 { > semanage_mls_enabled; > semanage_module_disable; > semanage_module_enable; > - semanage_module_get_enabled; > semanage_module_get_name; > semanage_module_get_version; > semanage_module_info_datum_destroy; > - semanage_module_install; > - semanage_module_install_base; > - semanage_module_install_base_file; > semanage_module_install_file; > semanage_module_list; > semanage_module_list_nth; > semanage_module_remove; > - semanage_module_upgrade; > semanage_module_upgrade_file; > semanage_msg_get_channel; > semanage_msg_get_fname; > diff --git a/libsemanage/src/modules.c b/libsemanage/src/modules.c > index 6d3eb60ae462..8b36801038df 100644 > --- a/libsemanage/src/modules.c > +++ b/libsemanage/src/modules.c > @@ -42,70 +42,7 @@ > #include "modules.h" > #include "debug.h" > > -asm(".symver semanage_module_get_enabled_1_1,semanage_module_get_enabled@@LIBSEMANAGE_1.1"); > -asm(".symver semanage_module_get_enabled_1_0,semanage_module_get_enabled@LIBSEMANAGE_1.0"); > -asm(".symver semanage_module_install_pp,semanage_module_install@LIBSEMANAGE_1.0"); > -asm(".symver semanage_module_install_hll,semanage_module_install@@LIBSEMANAGE_1.1"); > - > -/* Takes a module stored in 'module_data' and parses its headers. > - * Sets reference variables 'module_name' to module's name and > - * 'version' to module's version. The caller is responsible for > - * free()ing 'module_name' and 'version'; they will be > - * set to NULL upon entering this function. Returns 0 on success, -1 > - * if out of memory, or -2 if data did not represent a module. > - */ > -static int parse_module_headers(semanage_handle_t * sh, char *module_data, > - size_t data_len, char **module_name, char **version) > -{ > - struct sepol_policy_file *pf; > - int file_type; > - *version = NULL; > - > - if (sepol_policy_file_create(&pf)) { > - ERR(sh, "Out of memory!"); > - return -1; > - } > - sepol_policy_file_set_mem(pf, module_data, data_len); > - sepol_policy_file_set_handle(pf, sh->sepolh); > - if (module_data == NULL || > - data_len == 0 || > - sepol_module_package_info(pf, &file_type, module_name, version) == -1) { > - sepol_policy_file_free(pf); > - ERR(sh, "Could not parse module data."); > - return -2; > - } > - sepol_policy_file_free(pf); > - if (file_type != SEPOL_POLICY_MOD) { > - ERR(sh, "Data did not represent a pp module. Please upgrade to the latest version of libsemanage to support hll modules."); > - return -2; > - } > - > - return 0; > -} > - > -/* This function is used to preserve ABI compatibility with > - * versions of semodule using LIBSEMANAGE_1.0 > - */ > -int semanage_module_install_pp(semanage_handle_t * sh, > - char *module_data, size_t data_len) > -{ > - char *name = NULL; > - char *version = NULL; > - int status; > - > - if ((status = parse_module_headers(sh, module_data, data_len, &name, &version)) != 0) { > - goto cleanup; > - } > - > - status = semanage_module_install_hll(sh, module_data, data_len, name, "pp"); > - > -cleanup: > - free(name); > - free(version); > - return status; > -} > - > -int semanage_module_install_hll(semanage_handle_t * sh, > +int semanage_module_install(semanage_handle_t * sh, > char *module_data, size_t data_len, const char *name, const char *ext_lang) > { > if (sh->funcs->install == NULL) { > @@ -160,16 +97,6 @@ int semanage_module_extract(semanage_handle_t * sh, > return sh->funcs->extract(sh, modkey, extract_cil, mapped_data, data_len, modinfo); > } > > -/* Legacy function that remains to preserve ABI > - * compatibility. Please use semanage_module_install instead. > - */ > -int semanage_module_upgrade(semanage_handle_t * sh, > - char *module_data, size_t data_len) > -{ > - return semanage_module_install_pp(sh, module_data, data_len); > - > -} > - > /* Legacy function that remains to preserve ABI > * compatibility. Please use semanage_module_install_file instead. > */ > @@ -179,24 +106,6 @@ int semanage_module_upgrade_file(semanage_handle_t * sh, > return semanage_module_install_file(sh, module_name); > } > > -/* Legacy function that remains to preserve ABI > - * compatibility. Please use semanage_module_install instead. > - */ > -int semanage_module_install_base(semanage_handle_t * sh, > - char *module_data, size_t data_len) > -{ > - return semanage_module_install_pp(sh, module_data, data_len); > -} > - > -/* Legacy function that remains to preserve ABI > - * compatibility. Please use semanage_module_install_file instead. > - */ > -int semanage_module_install_base_file(semanage_handle_t * sh, > - const char *module_name) > -{ > - return semanage_module_install_file(sh, module_name); > -} > - > int semanage_module_remove(semanage_handle_t * sh, char *module_name) > { > if (sh->funcs->remove == NULL) { > @@ -780,7 +689,7 @@ int semanage_module_key_set_priority(semanage_handle_t *sh, > } > > > -int semanage_module_get_enabled_1_1(semanage_handle_t *sh, > +int semanage_module_get_enabled(semanage_handle_t *sh, > const semanage_module_key_t *modkey, > int *enabled) > { > @@ -800,11 +709,6 @@ int semanage_module_get_enabled_1_1(semanage_handle_t *sh, > return sh->funcs->get_enabled(sh, modkey, enabled); > } > > -int semanage_module_get_enabled_1_0(semanage_module_info_t *modinfo) > -{ > - return modinfo->enabled; > -} > - > int semanage_module_set_enabled(semanage_handle_t *sh, > const semanage_module_key_t *modkey, > int enabled) > diff --git a/libsemanage/src/modules.h b/libsemanage/src/modules.h > index 2d3576fb15df..64d4a157f5ca 100644 > --- a/libsemanage/src/modules.h > +++ b/libsemanage/src/modules.h > @@ -26,16 +26,9 @@ > > #include "semanage/modules.h" > > -int semanage_module_install_pp(semanage_handle_t * sh, > - char *module_data, size_t data_len); > -int semanage_module_install_hll(semanage_handle_t * sh, > - char *module_data, size_t data_len, const char *name, const char *ext_lang); > -int semanage_module_upgrade(semanage_handle_t * sh, > - char *module_data, size_t data_len); > + > int semanage_module_upgrade_file(semanage_handle_t * sh, > const char *module_name); > -int semanage_module_install_base(semanage_handle_t * sh, > - char *module_data, size_t data_len); > int semanage_module_install_base_file(semanage_handle_t * sh, > const char *module_name); > > diff --git a/libsemanage/src/semanageswig_python.i b/libsemanage/src/semanageswig_python.i > index 8dd79fc24213..5f0113966962 100644 > --- a/libsemanage/src/semanageswig_python.i > +++ b/libsemanage/src/semanageswig_python.i > @@ -30,8 +30,6 @@ > %} > > %include "stdint.i" > -%ignore semanage_module_install_pp; > -%ignore semanage_module_install_hll; > > %wrapper %{ > > -- > 2.28.0 >
diff --git a/libsemanage/include/semanage/modules.h b/libsemanage/include/semanage/modules.h index ac4039314857..b51f61f033d5 100644 --- a/libsemanage/include/semanage/modules.h +++ b/libsemanage/include/semanage/modules.h @@ -33,7 +33,7 @@ typedef struct semanage_module_key semanage_module_key_t; */ extern int semanage_module_install(semanage_handle_t *, - char *module_data, size_t data_len, char *name, char *ext_lang); + char *module_data, size_t data_len, const char *name, const char *ext_lang); extern int semanage_module_install_file(semanage_handle_t *, const char *module_name); extern int semanage_module_remove(semanage_handle_t *, char *module_name); diff --git a/libsemanage/src/libsemanage.map b/libsemanage/src/libsemanage.map index 1375a8ca0ea7..4bec06aaae27 100644 --- a/libsemanage/src/libsemanage.map +++ b/libsemanage/src/libsemanage.map @@ -167,18 +167,13 @@ LIBSEMANAGE_1.0 { semanage_mls_enabled; semanage_module_disable; semanage_module_enable; - semanage_module_get_enabled; semanage_module_get_name; semanage_module_get_version; semanage_module_info_datum_destroy; - semanage_module_install; - semanage_module_install_base; - semanage_module_install_base_file; semanage_module_install_file; semanage_module_list; semanage_module_list_nth; semanage_module_remove; - semanage_module_upgrade; semanage_module_upgrade_file; semanage_msg_get_channel; semanage_msg_get_fname; diff --git a/libsemanage/src/modules.c b/libsemanage/src/modules.c index 6d3eb60ae462..8b36801038df 100644 --- a/libsemanage/src/modules.c +++ b/libsemanage/src/modules.c @@ -42,70 +42,7 @@ #include "modules.h" #include "debug.h" -asm(".symver semanage_module_get_enabled_1_1,semanage_module_get_enabled@@LIBSEMANAGE_1.1"); -asm(".symver semanage_module_get_enabled_1_0,semanage_module_get_enabled@LIBSEMANAGE_1.0"); -asm(".symver semanage_module_install_pp,semanage_module_install@LIBSEMANAGE_1.0"); -asm(".symver semanage_module_install_hll,semanage_module_install@@LIBSEMANAGE_1.1"); - -/* Takes a module stored in 'module_data' and parses its headers. - * Sets reference variables 'module_name' to module's name and - * 'version' to module's version. The caller is responsible for - * free()ing 'module_name' and 'version'; they will be - * set to NULL upon entering this function. Returns 0 on success, -1 - * if out of memory, or -2 if data did not represent a module. - */ -static int parse_module_headers(semanage_handle_t * sh, char *module_data, - size_t data_len, char **module_name, char **version) -{ - struct sepol_policy_file *pf; - int file_type; - *version = NULL; - - if (sepol_policy_file_create(&pf)) { - ERR(sh, "Out of memory!"); - return -1; - } - sepol_policy_file_set_mem(pf, module_data, data_len); - sepol_policy_file_set_handle(pf, sh->sepolh); - if (module_data == NULL || - data_len == 0 || - sepol_module_package_info(pf, &file_type, module_name, version) == -1) { - sepol_policy_file_free(pf); - ERR(sh, "Could not parse module data."); - return -2; - } - sepol_policy_file_free(pf); - if (file_type != SEPOL_POLICY_MOD) { - ERR(sh, "Data did not represent a pp module. Please upgrade to the latest version of libsemanage to support hll modules."); - return -2; - } - - return 0; -} - -/* This function is used to preserve ABI compatibility with - * versions of semodule using LIBSEMANAGE_1.0 - */ -int semanage_module_install_pp(semanage_handle_t * sh, - char *module_data, size_t data_len) -{ - char *name = NULL; - char *version = NULL; - int status; - - if ((status = parse_module_headers(sh, module_data, data_len, &name, &version)) != 0) { - goto cleanup; - } - - status = semanage_module_install_hll(sh, module_data, data_len, name, "pp"); - -cleanup: - free(name); - free(version); - return status; -} - -int semanage_module_install_hll(semanage_handle_t * sh, +int semanage_module_install(semanage_handle_t * sh, char *module_data, size_t data_len, const char *name, const char *ext_lang) { if (sh->funcs->install == NULL) { @@ -160,16 +97,6 @@ int semanage_module_extract(semanage_handle_t * sh, return sh->funcs->extract(sh, modkey, extract_cil, mapped_data, data_len, modinfo); } -/* Legacy function that remains to preserve ABI - * compatibility. Please use semanage_module_install instead. - */ -int semanage_module_upgrade(semanage_handle_t * sh, - char *module_data, size_t data_len) -{ - return semanage_module_install_pp(sh, module_data, data_len); - -} - /* Legacy function that remains to preserve ABI * compatibility. Please use semanage_module_install_file instead. */ @@ -179,24 +106,6 @@ int semanage_module_upgrade_file(semanage_handle_t * sh, return semanage_module_install_file(sh, module_name); } -/* Legacy function that remains to preserve ABI - * compatibility. Please use semanage_module_install instead. - */ -int semanage_module_install_base(semanage_handle_t * sh, - char *module_data, size_t data_len) -{ - return semanage_module_install_pp(sh, module_data, data_len); -} - -/* Legacy function that remains to preserve ABI - * compatibility. Please use semanage_module_install_file instead. - */ -int semanage_module_install_base_file(semanage_handle_t * sh, - const char *module_name) -{ - return semanage_module_install_file(sh, module_name); -} - int semanage_module_remove(semanage_handle_t * sh, char *module_name) { if (sh->funcs->remove == NULL) { @@ -780,7 +689,7 @@ int semanage_module_key_set_priority(semanage_handle_t *sh, } -int semanage_module_get_enabled_1_1(semanage_handle_t *sh, +int semanage_module_get_enabled(semanage_handle_t *sh, const semanage_module_key_t *modkey, int *enabled) { @@ -800,11 +709,6 @@ int semanage_module_get_enabled_1_1(semanage_handle_t *sh, return sh->funcs->get_enabled(sh, modkey, enabled); } -int semanage_module_get_enabled_1_0(semanage_module_info_t *modinfo) -{ - return modinfo->enabled; -} - int semanage_module_set_enabled(semanage_handle_t *sh, const semanage_module_key_t *modkey, int enabled) diff --git a/libsemanage/src/modules.h b/libsemanage/src/modules.h index 2d3576fb15df..64d4a157f5ca 100644 --- a/libsemanage/src/modules.h +++ b/libsemanage/src/modules.h @@ -26,16 +26,9 @@ #include "semanage/modules.h" -int semanage_module_install_pp(semanage_handle_t * sh, - char *module_data, size_t data_len); -int semanage_module_install_hll(semanage_handle_t * sh, - char *module_data, size_t data_len, const char *name, const char *ext_lang); -int semanage_module_upgrade(semanage_handle_t * sh, - char *module_data, size_t data_len); + int semanage_module_upgrade_file(semanage_handle_t * sh, const char *module_name); -int semanage_module_install_base(semanage_handle_t * sh, - char *module_data, size_t data_len); int semanage_module_install_base_file(semanage_handle_t * sh, const char *module_name); diff --git a/libsemanage/src/semanageswig_python.i b/libsemanage/src/semanageswig_python.i index 8dd79fc24213..5f0113966962 100644 --- a/libsemanage/src/semanageswig_python.i +++ b/libsemanage/src/semanageswig_python.i @@ -30,8 +30,6 @@ %} %include "stdint.i" -%ignore semanage_module_install_pp; -%ignore semanage_module_install_hll; %wrapper %{
Versioned duplicate symbols cause problems for LTO. These symbols were introduced during the CIL integration several releases ago and were only consumed by other SELinux userspace components. Related: https://github.com/SELinuxProject/selinux/issues/245 Signed-off-by: Petr Lautrbach <plautrba@redhat.com> --- libsemanage/include/semanage/modules.h | 2 +- libsemanage/src/libsemanage.map | 5 -- libsemanage/src/modules.c | 100 +------------------------ libsemanage/src/modules.h | 9 +-- libsemanage/src/semanageswig_python.i | 2 - 5 files changed, 4 insertions(+), 114 deletions(-)