Home | History | Annotate | Download | only in solaris
      1 /* Scalar test for new labelsys syscall subcodes TSOL_GETCLEARANCE
      2    and TSOL_SETCLEARANCE available on Solaris 11. */
      3 
      4 #include "scalar.h"
      5 
      6 #include <sys/syscall.h>
      7 #include <sys/tsol/tsyscall.h>
      8 #include <tsol/label.h>
      9 
     10 __attribute__((noinline))
     11 static void sys_labelsys(void)
     12 {
     13    GO(SYS_labelsys, "(TSOL_GETCLEARANCE) 2s 1m");
     14    SY(SYS_labelsys, x0 + TSOL_GETCLEARANCE, x0 + 1); FAIL;
     15 }
     16 
     17 __attribute__((noinline))
     18 static void sys_labelsys2(void)
     19 {
     20    m_label_t *label = m_label_alloc(USER_CLEAR);
     21    if (label == NULL) {
     22       perror("m_label_alloc");
     23       return;
     24    }
     25 
     26    GO(SYS_labelsys, "(TSOL_GETCLEARANCE) 1s 0m");
     27    SY(SYS_labelsys, x0 + TSOL_GETCLEARANCE, label); SUCC;
     28 
     29    m_label_free(label);
     30 }
     31 
     32 __attribute__((noinline))
     33 static void sys_labelsys3(void)
     34 {
     35    GO(SYS_labelsys, "(TSOL_SETCLEARANCE) 2s 1m");
     36    SY(SYS_labelsys, x0 + TSOL_SETCLEARANCE, x0 + 1); FAIL;
     37 }
     38 
     39 __attribute__((noinline))
     40 static void sys_labelsys4(void)
     41 {
     42    m_label_t *label = m_label_alloc(USER_CLEAR);
     43    if (label == NULL) {
     44       perror("m_label_alloc");
     45       return;
     46    }
     47 
     48    int ret = getclearance(label);
     49    if (ret != 0) {
     50       perror("getclearance");
     51       m_label_free(label);
     52       return;
     53    }
     54 
     55    GO(SYS_labelsys, "(TSOL_SETCLEARANCE) 1s 0m");
     56    SY(SYS_labelsys, x0 + TSOL_SETCLEARANCE, label); SUCC;
     57 
     58    m_label_free(label);
     59 }
     60 
     61 int main(void)
     62 {
     63    /* Uninitialised, but we know px[0] is 0x0. */
     64    long *px = malloc(sizeof(long));
     65    x0 = px[0];
     66 
     67    /* SYS_labelsys                52 */
     68    sys_labelsys();
     69    sys_labelsys2();
     70    sys_labelsys3();
     71    sys_labelsys4();
     72 
     73    return 0;
     74 }
     75 
     76