* [Xenomai-help] Xenomai and mlockall
@ 2007-06-25 13:00 Johan Borkhuis
[not found] ` <cbe23c50706250904i57afbc0xfbce52fdb9dccc66@domain.hid>
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Johan Borkhuis @ 2007-06-25 13:00 UTC (permalink / raw)
To: Xenomai-help
I am trying to run my Xenomai application as non-root. I disabled
XENO_OPT_SECURITY_ACCESS to allow non-root users to run Xenomai
applications. However, this causes my application to exit with the error:
Xenomai: process memory not locked (missing mlockall?)
Is there a way to avoid this error? I am running on an embedded system
without swap and without disk, so there is no real need for mlock or
mlockall.
Is there a way to "tweak" the CAP_IPC_LOCK capability of the system or
the task so that I can run mlockall call, or is there a way to disable
this check on Xenomai?
Kind regards,
Johan Borkhuis
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Xenomai-help] Fwd: Xenomai and mlockall
[not found] ` <cbe23c50706250904i57afbc0xfbce52fdb9dccc66@domain.hid>
@ 2007-06-25 16:05 ` Eric Noulard
2007-06-26 6:10 ` Johan Borkhuis
0 siblings, 1 reply; 5+ messages in thread
From: Eric Noulard @ 2007-06-25 16:05 UTC (permalink / raw)
To: Xenomai help
Sorry forgot to send to the list
---------- Forwarded message ----------
From: Eric Noulard <eric.noulard@domain.hid>
Date: 25 juin 2007 18:04
Subject: Re: [Xenomai-help] Xenomai and mlockall
To: Johan Borkhuis <j.borkhuis@domain.hid>
2007/6/25, Johan Borkhuis <j.borkhuis@domain.hid>:
> I am trying to run my Xenomai application as non-root. I disabled
> XENO_OPT_SECURITY_ACCESS to allow non-root users to run Xenomai
> applications. However, this causes my application to exit with the error:
>
> Xenomai: process memory not locked (missing mlockall?)
>
> Is there a way to avoid this error? I am running on an embedded system
> without swap and without disk, so there is no real need for mlock or
> mlockall.
I may be wrong but even on embedded system without
mlockall(MCL_FUTURE) how can you be sure the memory you get from from
a dynamically allocated memory (malloc/calloc etc...) is
currently allocated in PHYSICAL memory?
Usually linux is lazy and it gives you "real" memory when
you hit the memory page.
> Is there a way to "tweak" the CAP_IPC_LOCK capability of the system or
> the task so that I can run mlockall call,
May be you can use 'sudo' to run the task?
> or is there a way to disable this check on Xenomai?
I am not able to answer this one :))
--
Erk
--
Erk
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Xenomai-help] Xenomai and mlockall
2007-06-25 13:00 [Xenomai-help] Xenomai and mlockall Johan Borkhuis
[not found] ` <cbe23c50706250904i57afbc0xfbce52fdb9dccc66@domain.hid>
@ 2007-06-25 18:04 ` Paul
2007-06-26 7:26 ` Philippe Gerum
2 siblings, 0 replies; 5+ messages in thread
From: Paul @ 2007-06-25 18:04 UTC (permalink / raw)
To: xenomai
[-- Attachment #1: Type: text/plain, Size: 379 bytes --]
On Monday 25 June 2007 14:00, Johan Borkhuis wrote:
> Is there a way to "tweak" the CAP_IPC_LOCK capability of the system or
> the task so that I can run mlockall call, or is there a way to disable
> this check on Xenomai?
See attached source - It needs to be linked to libcap. Once compiled, set
user/group to root along with the sticky flag (chmod a+s).
Regards, Paul.
[-- Attachment #2: capabilities_demo.c --]
[-- Type: text/x-csrc, Size: 3064 bytes --]
/********************************************************************
*
* Description: capabilities_demo.c
*
* Based on trivial-periodic.c from Xenomai's examples/native
* directory - Additional material for dropping root privileges
* and communicating with a kernel task subject to the following
* statement:
*
* Author: Paul Corner <paul_c@domain.hid>
* Created on: Thu Mar 29 12:21:00 BST 2007
* License: GPL Ver. 2
*
* Copyright (c) 2007 Paul Corner <paul_c@domain.hid> All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
********************************************************************/
#include "autoconf.h"
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/mman.h>
#include <native/task.h>
#include <native/heap.h>
#include <native/timer.h>
#define TASK_PRIO 10
void catch_signal(int sig)
{
}
#if HAVE_LIBCAP
#include <sys/capability.h>
#include <sys/prctl.h>
#endif
void set_security(void)
{
#if HAVE_LIBCAP
cap_t cap;
/* Running as root - No need to drop anything. */
if (getuid() == 0)
return;
/* Do a `chown root` and `chmod a+s` to allow non-root use */
if (geteuid() != 0) {
printf("suid not set - aborting");
exit(-EPERM);
}
/* keep root capabilities in the transition to non-root user */
prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);
setuid(getuid());
/* drop all privs except CAP_SYS_NICE (for Xenomai), CAP_IPC_LOCK
(for mlockall), and CAP_SYS_RAWIO (for ioperm/iopl) for all
current and future ops - Note: If all IO is done in kernel space,
CAP_SYS_RAWIO can be dropped. */
cap = cap_from_text("CAP_SYS_RAWIO,CAP_IPC_LOCK,CAP_SYS_NICE+ep");
if (errno)
perror("cap_from_text failed");
if (cap_set_proc(cap) < 0) {
perror("Failed to drop root privileges, aborting");
exit(-EPERM);
}
cap_free(cap);
#endif
return;
}
RT_HEAP driver_heap;
int main(int argc, char *argv[])
{
int err = 0;
int t, k, s;
void* mem = NULL;
struct driver_info *info;
struct driver_data *data;
RT_HEAP_INFO heap_info;
signal(SIGTERM, catch_signal);
signal(SIGINT, catch_signal);
set_security();
/* Avoids memory swapping for this program */
mlockall(MCL_CURRENT | MCL_FUTURE);
rt_task_create(&demo_task, "trivial", 0, TASK_PRIO, 0);
rt_task_start(&demo_task, &demo, NULL);
pause();
return err;
}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Xenomai-help] Fwd: Xenomai and mlockall
2007-06-25 16:05 ` [Xenomai-help] Fwd: " Eric Noulard
@ 2007-06-26 6:10 ` Johan Borkhuis
0 siblings, 0 replies; 5+ messages in thread
From: Johan Borkhuis @ 2007-06-26 6:10 UTC (permalink / raw)
To: Eric Noulard; +Cc: Xenomai help
Eric Noulard wrote:
> 2007/6/25, Johan Borkhuis <j.borkhuis@domain.hid>:
>
>> I am trying to run my Xenomai application as non-root. I disabled
>> XENO_OPT_SECURITY_ACCESS to allow non-root users to run Xenomai
>> applications. However, this causes my application to exit with the error:
>>
>> Xenomai: process memory not locked (missing mlockall?)
>>
>> Is there a way to avoid this error? I am running on an embedded system
>> without swap and without disk, so there is no real need for mlock or
>> mlockall.
>>
>
> I may be wrong but even on embedded system without
> mlockall(MCL_FUTURE) how can you be sure the memory you get from from
> a dynamically allocated memory (malloc/calloc etc...) is
> currently allocated in PHYSICAL memory?
>
I disabled swap, and also I don't have a physical disc connected to the
system. The system boots from a TFTP server, and the root file system is
mounted using NFS. So I think I can be pretty sure that all allocated
memory is in physical memory :-)
>> Is there a way to "tweak" the CAP_IPC_LOCK capability of the system or
>> the task so that I can run mlockall call,
>>
>
> May be you can use 'sudo' to run the task?
>
That is a possibility, but I prefer application to run as a regular user
and not as root.
I did find another way/hack around this problem. After looking in the
kernel I found out that the maximum amount of locked memory is limited
to 32 kbyte (= 8 pages) for a regular user (see also "ulimit -a") and
this limit is hard-coded into the kernel. My application asked to lock
just over 600 pages, so this was not allowed
After increasing this allowed amount to a much larger value the mlockall
succeeded and the application runs OK:
==============
--- linux-2.6.14/include/linux/resource.h 2005-10-28 02:02:08.000000000
+0200
+++ linux-2.6.14-mot/include/linux/resource.h 2007-06-25
15:46:16.622475000 +0200
@@ -59,7 +59,7 @@
* GPG wants 32kB of mlocked memory, to make sure pass phrases
* and other sensitive information are never written to disk.
*/
-#define MLOCK_LIMIT (8 * PAGE_SIZE)
+#define MLOCK_LIMIT (4096 * PAGE_SIZE)
/*
* Due to binary compatibility, the actual resource numbers
==============
Kind regards,
Johan Borkhuis
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Xenomai-help] Xenomai and mlockall
2007-06-25 13:00 [Xenomai-help] Xenomai and mlockall Johan Borkhuis
[not found] ` <cbe23c50706250904i57afbc0xfbce52fdb9dccc66@domain.hid>
2007-06-25 18:04 ` [Xenomai-help] " Paul
@ 2007-06-26 7:26 ` Philippe Gerum
2 siblings, 0 replies; 5+ messages in thread
From: Philippe Gerum @ 2007-06-26 7:26 UTC (permalink / raw)
To: Johan Borkhuis; +Cc: Xenomai-help
On Mon, 2007-06-25 at 15:00 +0200, Johan Borkhuis wrote:
> I am trying to run my Xenomai application as non-root. I disabled
> XENO_OPT_SECURITY_ACCESS to allow non-root users to run Xenomai
> applications. However, this causes my application to exit with the error:
>
> Xenomai: process memory not locked (missing mlockall?)
>
> Is there a way to avoid this error? I am running on an embedded system
> without swap and without disk, so there is no real need for mlock or
> mlockall.
>
swap is not the only source of page faults, ondemand application/library
loading is another one.
> Is there a way to "tweak" the CAP_IPC_LOCK capability of the system or
> the task so that I can run mlockall call, or is there a way to disable
> this check on Xenomai?
No way to disable it, since doing so would basically make your system
dysfunctional by risking page faults while not running over a regular
Linux context (i.e. Xenomai's primary domain).
IOW, you do want mlockall() to be in effect for Xenomai apps.
Hint: If you think some process is overconsuming locked memory, you may
want to have a look at /proc/<pid>/maps for the process in question, and
check the size of the various segments listed there, and especially the
stack related one.
>
> Kind regards,
> Johan Borkhuis
>
> _______________________________________________
> Xenomai-help mailing list
> Xenomai-help@domain.hid
> https://mail.gna.org/listinfo/xenomai-help
--
Philippe.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-06-26 7:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-25 13:00 [Xenomai-help] Xenomai and mlockall Johan Borkhuis
[not found] ` <cbe23c50706250904i57afbc0xfbce52fdb9dccc66@domain.hid>
2007-06-25 16:05 ` [Xenomai-help] Fwd: " Eric Noulard
2007-06-26 6:10 ` Johan Borkhuis
2007-06-25 18:04 ` [Xenomai-help] " Paul
2007-06-26 7:26 ` Philippe Gerum
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.