LCOV - code coverage report
Current view: directory - src/trusted/service_runtime - nacl_copy.c (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 36 31 86.1 %
Date: 2014-07-02 Functions: 0 0 -

       1                 : /*
       2                 :  * Copyright (c) 2012 The Native Client 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                 : 
       7                 : #include <string.h>
       8                 : 
       9                 : #include "native_client/src/trusted/service_runtime/nacl_copy.h"
      10                 : 
      11                 : #include "native_client/src/shared/platform/nacl_check.h"
      12                 : #include "native_client/src/shared/platform/nacl_sync_checked.h"
      13                 : #include "native_client/src/trusted/service_runtime/sel_ldr.h"
      14                 : 
      15          102321 : int NaClCopyInFromUser(struct NaClApp *nap,
      16                 :                        void           *dst_sys_ptr,
      17                 :                        uintptr_t      src_usr_addr,
      18                 :                        size_t         num_bytes) {
      19                 :   uintptr_t src_sys_addr;
      20                 : 
      21          102321 :   src_sys_addr = NaClUserToSysAddrRange(nap, src_usr_addr, num_bytes);
      22          102319 :   if (kNaClBadAddress == src_sys_addr) {
      23               3 :     return 0;
      24                 :   }
      25          102316 :   NaClCopyTakeLock(nap);
      26          102324 :   memcpy((void *) dst_sys_ptr, (void *) src_sys_addr, num_bytes);
      27          102324 :   NaClCopyDropLock(nap);
      28                 : 
      29          102319 :   return 1;
      30                 : }
      31                 : 
      32         1491181 : int NaClCopyInFromUserAndDropLock(struct NaClApp *nap,
      33                 :                                   void           *dst_sys_ptr,
      34                 :                                   uintptr_t      src_usr_addr,
      35                 :                                   size_t         num_bytes) {
      36                 :   uintptr_t src_sys_addr;
      37                 : 
      38         1491181 :   src_sys_addr = NaClUserToSysAddrRange(nap, src_usr_addr, num_bytes);
      39         1491181 :   if (kNaClBadAddress == src_sys_addr) {
      40               0 :     return 0;
      41                 :   }
      42                 : 
      43         1491181 :   memcpy((void *) dst_sys_ptr, (void *) src_sys_addr, num_bytes);
      44         1491181 :   NaClCopyDropLock(nap);
      45                 : 
      46         1491181 :   return 1;
      47                 : }
      48                 : 
      49             237 : int NaClCopyInFromUserZStr(struct NaClApp *nap,
      50                 :                            char           *dst_buffer,
      51                 :                            size_t         dst_buffer_bytes,
      52                 :                            uintptr_t      src_usr_addr) {
      53                 :   uintptr_t src_sys_addr;
      54                 : 
      55             237 :   CHECK(dst_buffer_bytes > 0);
      56             237 :   src_sys_addr = NaClUserToSysAddr(nap, src_usr_addr);
      57             237 :   if (kNaClBadAddress == src_sys_addr) {
      58               0 :     dst_buffer[0] = '\0';
      59               0 :     return 0;
      60                 :   }
      61             237 :   NaClCopyTakeLock(nap);
      62             237 :   strncpy(dst_buffer, (char *) src_sys_addr, dst_buffer_bytes);
      63             237 :   NaClCopyDropLock(nap);
      64                 : 
      65                 :   /* POSIX strncpy pads with NUL characters */
      66             237 :   if (dst_buffer[dst_buffer_bytes - 1] != '\0') {
      67               0 :     dst_buffer[dst_buffer_bytes - 1] = '\0';
      68               0 :     return 0;
      69                 :   }
      70             237 :   return 1;
      71                 : }
      72                 : 
      73                 : 
      74          444159 : int NaClCopyOutToUser(struct NaClApp  *nap,
      75                 :                       uintptr_t       dst_usr_addr,
      76                 :                       void            *src_sys_ptr,
      77                 :                       size_t          num_bytes) {
      78                 :   uintptr_t dst_sys_addr;
      79                 : 
      80          444159 :   dst_sys_addr = NaClUserToSysAddrRange(nap, dst_usr_addr, num_bytes);
      81          444165 :   if (kNaClBadAddress == dst_sys_addr) {
      82               1 :     return 0;
      83                 :   }
      84          444164 :   NaClCopyTakeLock(nap);
      85          444164 :   memcpy((void *) dst_sys_addr, src_sys_ptr, num_bytes);
      86          444164 :   NaClCopyDropLock(nap);
      87                 : 
      88          444164 :   return 1;
      89                 : }

Generated by: LCOV version 1.7