Skip to content

Commit

Permalink
libselinux: declare return value of context_str(3) const
Browse files Browse the repository at this point in the history
context_str(3) returns a string representation of the given context.
This string is owned by the context and free'd on context_free(3).
Declare it const, as already done in the man page, since it must not be
free'd by the caller.

Signed-off-by: Christian Göttsche <[email protected]>
Acked-by: Nicolas Iooss <[email protected]>
  • Loading branch information
cgzones authored and jwcart2 committed Jun 2, 2022
1 parent 0a8c177 commit dd98fa3
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 9 deletions.
2 changes: 1 addition & 1 deletion libselinux/include/selinux/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ extern "C" {
* for the same context_t*
*/

extern char *context_str(context_t);
extern const char *context_str(context_t);

/* Free the storage used by a context */
extern void context_free(context_t);
Expand Down
2 changes: 1 addition & 1 deletion libselinux/src/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ void context_free(context_t context)
/*
* Return a pointer to the string value of the context.
*/
char *context_str(context_t context)
const char *context_str(context_t context)
{
context_private_t *n = context->ptr;
int i;
Expand Down
11 changes: 6 additions & 5 deletions libselinux/src/get_context_list.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ static int get_context_user(FILE * fp,
char *linerole, *linetype;
char **new_reachable = NULL;
char *usercon_str;
const char *usercon_str2;
context_t con;
context_t usercon;

Expand Down Expand Up @@ -257,28 +258,28 @@ static int get_context_user(FILE * fp,
rc = -1;
goto out;
}
usercon_str = context_str(usercon);
if (!usercon_str) {
usercon_str2 = context_str(usercon);
if (!usercon_str2) {
context_free(usercon);
rc = -1;
goto out;
}

/* check whether usercon is already in reachable */
if (is_in_reachable(*reachable, usercon_str)) {
if (is_in_reachable(*reachable, usercon_str2)) {
context_free(usercon);
start = end;
continue;
}
if (security_check_context(usercon_str) == 0) {
if (security_check_context(usercon_str2) == 0) {
new_reachable = realloc(*reachable, (*nreachable + 2) * sizeof(char *));
if (!new_reachable) {
context_free(usercon);
rc = -1;
goto out;
}
*reachable = new_reachable;
new_reachable[*nreachable] = strdup(usercon_str);
new_reachable[*nreachable] = strdup(usercon_str2);
if (new_reachable[*nreachable] == NULL) {
context_free(usercon);
rc = -1;
Expand Down
2 changes: 1 addition & 1 deletion libselinux/src/query_user_context.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ int manual_user_enter_context(const char *user, char ** newcon)
int mls_enabled = is_selinux_mls_enabled();

context_t new_context; /* The new context chosen by the user */
char *user_context = NULL; /* String value of the user's context */
const char *user_context = NULL; /* String value of the user's context */
int done = 0; /* true if a valid sid has been obtained */

/* Initialize the context. How this is done depends on whether
Expand Down
2 changes: 1 addition & 1 deletion policycoreutils/newrole/newrole.c
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,7 @@ static int parse_command_line_arguments(int argc, char **argv, char *ttyn,
char *type_ptr = NULL; /* stores malloc'd data from get_default_type */
char *level_s = NULL; /* level spec'd by user in argv[] */
char *range_ptr = NULL;
char *new_con = NULL;
const char *new_con = NULL;
char *tty_con = NULL;
context_t context = NULL; /* manipulatable form of new_context */
const struct option long_options[] = {
Expand Down

0 comments on commit dd98fa3

Please sign in to comment.