Print this page
    
9971 Make getrandom(2) a public interface
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sys/random.h
          +++ new/usr/src/uts/common/sys/random.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  
    | 
      ↓ open down ↓ | 
    15 lines elided | 
    
      ↑ open up ↑ | 
  
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   */
  25   25  /*
  26      - * Copyright (c) 2015, Joyent, Inc.
       26 + * Copyright (c) 2018, Joyent, Inc.
  27   27   * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
  28   28   */
  29   29  
  30   30  #ifndef _SYS_RANDOM_H
  31   31  #define _SYS_RANDOM_H
  32   32  
  33   33  #include <sys/types.h>
  34   34  #include <sys/atomic.h>
  35   35  
  36   36  #ifdef  __cplusplus
  37   37  extern "C" {
  38   38  #endif
  39   39  
  40   40  /* stats for the random number devices, /dev/random and /dev/urandom. */
  41   41  typedef struct rnd_stats {
  42   42          uint64_t        rs_rndOut;      /* Bytes generated for /dev/random */
  43   43          uint64_t        rs_rndcOut;     /* Bytes read from /dev/random cache */
  44   44          uint64_t        rs_urndOut;     /* Bytes generated for /dev/urandom */
  45   45  } rnd_stats_t;
  46   46  
  47   47  /* stats for the kernel random number provider, swrand. */
  48   48  typedef struct swrand_stats {
  49   49          uint32_t        ss_entEst;      /* Entropy estimate in bits */
  50   50          uint64_t        ss_entIn;       /* Entropy bits added to pool */
  51   51          uint64_t        ss_entOut;      /* Entropy bits extracted from pool */
  52   52          uint64_t        ss_bytesIn;     /* Total data bytes added to pool */
  53   53          uint64_t        ss_bytesOut;    /* Total data bytes extracted from */
  54   54                                          /* the pool */
  55   55  } swrand_stats_t;
  56   56  
  57   57  #if defined(_KERNEL) || defined(_FAKE_KERNEL)
  58   58  
  59   59  #define BUMP_CPU_RND_STATS(rm, x, v)    (((rm)->rm_mag.rm_stats).x += (v))
  60   60  #define BUMP_RND_STATS(x, v)    atomic_add_64(&(rnd_stats).x, (v))
  
    | 
      ↓ open down ↓ | 
    24 lines elided | 
    
      ↑ open up ↑ | 
  
  61   61  #define BUMP_SWRAND_STATS(x, v) atomic_add_64(&(swrand_stats).x, (v))
  62   62  
  63   63  extern int random_add_entropy(uint8_t *, size_t, uint_t);
  64   64  extern int random_get_bytes(uint8_t *, size_t);
  65   65  extern int random_get_blocking_bytes(uint8_t *, size_t);
  66   66  extern int random_get_pseudo_bytes(uint8_t *, size_t);
  67   67  
  68   68  #endif /* _KERNEL */
  69   69  
  70   70  /*
  71      - * Flags for the getrandom system call. Note, we may want to move these
  72      - * definitions if we expose getrandom(2) into a public system call.
       71 + * Flags for the getrandom(2) system call.
  73   72   */
  74   73  #define GRND_NONBLOCK   0x0001          /* O_NONBLOCK equiv */
  75   74  #define GRND_RANDOM     0x0002          /* Use /dev/random, not /dev/urandom */
  76      -extern int getrandom(void *, size_t, int);
       75 +extern ssize_t getrandom(void *, size_t, unsigned int);
  77   76  
  78   77  #ifdef  __cplusplus
  79   78  }
  80   79  #endif
  81   80  
  82   81  #endif /* _SYS_RANDOM_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX