Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  procattr.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
/*
 * AppArmor security module
 *
 * This file contains AppArmor /proc/<pid>/attr/ interface functions
 *
 * Copyright (C) 1998-2008 Novell/SUSE
 * Copyright 2009-2010 Canonical Ltd.
 */


#include "include/apparmor.h"
#include "include/cred.h"
#include "include/policy.h"
#include "include/policy_ns.h"
#include "include/domain.h"
#include "include/procattr.h"


/**
 * aa_getprocattr - Return the label information for @label
 * @label: the label to print label info about  (NOT NULL)
 * @string: Returns - string containing the label info (NOT NULL)
 * @newline: indicates that a newline should be added
 *
 * Requires: label != NULL && string != NULL
 *
 * Creates a string containing the label information for @label.
 *
 * Returns: size of string placed in @string else error code on failure
 */

int aa_getprocattr(struct aa_label *label, char **string, bool newline)
{
 struct aa_ns *ns = labels_ns(label);
 struct aa_ns *current_ns = aa_get_current_ns();
 int len;

 if (!aa_ns_visible(current_ns, ns, true)) {
  aa_put_ns(current_ns);
  return -EACCES;
 }

 len = aa_label_snxprint(NULL, 0, current_ns, label,
    FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
    FLAG_HIDDEN_UNCONFINED);
 AA_BUG(len < 0);

 *string = kmalloc(len + 2, GFP_KERNEL);
 if (!*string) {
  aa_put_ns(current_ns);
  return -ENOMEM;
 }

 len = aa_label_snxprint(*string, len + 2, current_ns, label,
    FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
    FLAG_HIDDEN_UNCONFINED);
 if (len < 0) {
  aa_put_ns(current_ns);
  return len;
 }

 if (newline)
  (*string)[len++] = '\n';
 (*string)[len] = 0;

 aa_put_ns(current_ns);
 return len;
}

/**
 * split_token_from_name - separate a string of form  <token>^<name>
 * @op: operation being checked
 * @args: string to parse  (NOT NULL)
 * @token: stores returned parsed token value  (NOT NULL)
 *
 * Returns: start position of name after token else NULL on failure
 */

static char *split_token_from_name(const char *op, char *args, u64 *token)
{
 char *name;

 *token = simple_strtoull(args, &name, 16);
 if ((name == args) || *name != '^') {
  AA_ERROR("%s: Invalid input '%s'", op, args);
  return ERR_PTR(-EINVAL);
 }

 name++;   /* skip ^ */
 if (!*name)
  name = NULL;
 return name;
}

/**
 * aa_setprocattr_changehat - handle procattr interface to change_hat
 * @args: args received from writing to /proc/<pid>/attr/current (NOT NULL)
 * @size: size of the args
 * @flags: set of flags governing behavior
 *
 * Returns: %0 or error code if change_hat fails
 */

int aa_setprocattr_changehat(char *args, size_t size, int flags)
{
 char *hat;
 u64 token;
 const char *hats[16];  /* current hard limit on # of names */
 int count = 0;

 hat = split_token_from_name(OP_CHANGE_HAT, args, &token);
 if (IS_ERR(hat))
  return PTR_ERR(hat);

 if (!hat && !token) {
  AA_ERROR("change_hat: Invalid input, NULL hat and NULL magic");
  return -EINVAL;
 }

 if (hat) {
  /* set up hat name vector, args guaranteed null terminated
 * at args[size] by setprocattr.
 *
 * If there are multiple hat names in the buffer each is
 * separated by a \0.  Ie. userspace writes them pre tokenized
 */

  char *end = args + size;
  for (count = 0; (hat < end) && count < 16; ++count) {
   char *next = hat + strlen(hat) + 1;
   hats[count] = hat;
   AA_DEBUG(DEBUG_DOMAIN,
     "%s: (pid %d) Magic 0x%llx count %d hat '%s'\n"
     , __func__, current->pid, token, count, hat);
   hat = next;
  }
 } else
  AA_DEBUG(DEBUG_DOMAIN,
    "%s: (pid %d) Magic 0x%llx count %d Hat '%s'\n",
    __func__, current->pid, token, count, "");

 return aa_change_hat(hats, count, token, flags);
}

Messung V0.5
C=92 H=93 G=92

¤ Dauer der Verarbeitung: 0.21 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge