Home | History | Annotate | Download | only in minijail
      1 /* libminijail-private.h
      2  * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
      3  * Use of this source code is governed by a BSD-style license that can be
      4  * found in the LICENSE file.
      5  *
      6  * Values shared between libminijailpreload and libminijail, but not visible to
      7  * the outside world.
      8  */
      9 
     10 #ifndef LIBMINIJAIL_PRIVATE_H
     11 #define LIBMINIJAIL_PRIVATE_H
     12 
     13 #ifdef __cplusplus
     14 extern "C" {
     15 #endif
     16 
     17 /* Explicitly declare exported functions so that -fvisibility tricks
     18  * can be used for testing and minimal symbol leakage occurs.
     19  */
     20 #define API __attribute__ ((visibility("default")))
     21 
     22 static const char *kFdEnvVar = "__MINIJAIL_FD";
     23 static const char *kLdPreloadEnvVar = "LD_PRELOAD";
     24 
     25 struct minijail;
     26 
     27 /* minijail_size: returns the size (in bytes) of @j if marshalled
     28  * @j jail to compute size of
     29  *
     30  * Returns 0 on error.
     31  */
     32 extern size_t minijail_size(const struct minijail *j);
     33 
     34 /* minijail_marshal: serializes @j to @buf
     35  * @j    minijail to serialize
     36  * @buf  buffer to serialize to
     37  * @size size of @buf
     38  *
     39  * Returns 0 on success.
     40  *
     41  * Writes |j| to |buf| such that it can be reparsed by the same
     42  * library on the same architecture.  This is meant to be used
     43  * by minijail0.c and libminijailpreload.c.  minijail flags that
     44  * require minijail_run() will be excluded.
     45  *
     46  * The marshalled data is not robust to differences between the child
     47  * and parent process (personality, etc).
     48  */
     49 extern int minijail_marshal(const struct minijail *j,
     50                             char *buf,
     51                             size_t size);
     52 
     53 /* minijail_unmarshal: initializes @j from @serialized
     54  * @j          minijail to initialize
     55  * @serialized serialized jail buffer
     56  * @length     length of buffer
     57  *
     58  * Returns 0 on success.
     59  */
     60 extern int minijail_unmarshal(struct minijail *j,
     61                               char *serialized,
     62                               size_t length);
     63 
     64 /* minijail_from_fd: builds @j from @fd
     65  * @j  minijail to initialize
     66  * @fd fd to initialize from
     67  *
     68  * Returns 0 on success.
     69  */
     70 extern int minijail_from_fd(int fd, struct minijail *j);
     71 
     72 /* minijail_to_fd: sends @j over @fd
     73  * @j  minijail to send
     74  * @fd fd to send over
     75  *
     76  * Returns 0 on success.
     77  */
     78 extern int minijail_to_fd(struct minijail *j, int fd);
     79 
     80 /* minijail_preexec: strips @j of all options handled by minijail_enter()
     81  * @j jail to strip
     82  */
     83 extern void minijail_preexec(struct minijail *j);
     84 
     85 /* minijail_preenter: strips @j of all options handled by minijail_run()
     86  * @j jail to strip
     87  */
     88 extern void minijail_preenter(struct minijail *j);
     89 
     90 #ifdef __cplusplus
     91 }; /* extern "C" */
     92 #endif
     93 
     94 #endif /* !LIBMINIJAIL_PRIVATE_H */
     95