Skip to content

Commit

Permalink
MDEV-9095 - [PATCH] systemd capability for --memlock
Browse files Browse the repository at this point in the history
Adjust systemd files to enable CAP_IPC_LOCK to allow rootless mlockall
(triggered by memlock option).

This is amended version of a patch originally submitted by Daniel Black.
  • Loading branch information
Sergey Vojtovich committed Dec 22, 2015
1 parent 87e6873 commit 27e6fd9
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 10 deletions.
28 changes: 18 additions & 10 deletions sql/mysqld.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5404,25 +5404,33 @@ static int init_server_components()
(void) mi_log(1);

#if defined(HAVE_MLOCKALL) && defined(MCL_CURRENT) && !defined(EMBEDDED_LIBRARY)
if (locked_in_memory && !getuid())
if (locked_in_memory)
{
if (setreuid((uid_t)-1, 0) == -1)
{ // this should never happen
sql_perror("setreuid");
unireg_abort(1);
int error;
if (user_info)
{
DBUG_ASSERT(!getuid());
if (setreuid((uid_t) -1, 0) == -1)
{
sql_perror("setreuid");
unireg_abort(1);
}
error= mlockall(MCL_CURRENT);
set_user(mysqld_user, user_info);
}
if (mlockall(MCL_CURRENT))
else
error= mlockall(MCL_CURRENT);

if (error)
{
if (global_system_variables.log_warnings)
sql_print_warning("Failed to lock memory. Errno: %d\n",errno);
locked_in_memory= 0;
}
if (user_info)
set_user(mysqld_user, user_info);
}
else
#else
locked_in_memory= 0;
#endif
locked_in_memory=0;

ft_init_stopwords();

Expand Down
3 changes: 3 additions & 0 deletions support-files/mariadb.service.in
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ PrivateNetwork=false
User=mysql
Group=mysql

# To allow memlock to be used as non-root user if set in configuration
CapabilityBoundingSet=CAP_IPC_LOCK

# Execute pre and post scripts as root, otherwise it does it as User=
PermissionsStartOnly=true

Expand Down
3 changes: 3 additions & 0 deletions support-files/mariadb@.service.in
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ PrivateNetwork=false
User=mysql
Group=mysql

# To allow memlock to be used as non-root user if set in configuration
CapabilityBoundingSet=CAP_IPC_LOCK

# Execute pre and post scripts as root, otherwise it does it as User=
PermissionsStartOnly=true

Expand Down

0 comments on commit 27e6fd9

Please sign in to comment.