LCOV - code coverage report
Current view: directory - src/trusted/service_runtime - nacl_copy.c (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 56 53 94.6 %
Date: 2014-06-18 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           91331 : int NaClCopyInFromUser(struct NaClApp *nap,
      16           91331 :                        void           *dst_sys_ptr,
      17           91331 :                        uintptr_t      src_usr_addr,
      18           91331 :                        size_t         num_bytes) {
      19           91331 :   uintptr_t src_sys_addr;
      20                 : 
      21           91331 :   src_sys_addr = NaClUserToSysAddrRange(nap, src_usr_addr, num_bytes);
      22           91331 :   if (kNaClBadAddress == src_sys_addr) {
      23               3 :     return 0;
      24                 :   }
      25           91328 :   NaClCopyTakeLock(nap);
      26          273984 :   memcpy((void *) dst_sys_ptr, (void *) src_sys_addr, num_bytes);
      27           91328 :   NaClCopyDropLock(nap);
      28                 : 
      29           91328 :   return 1;
      30           91331 : }
      31                 : 
      32         1963723 : int NaClCopyInFromUserAndDropLock(struct NaClApp *nap,
      33         1963723 :                                   void           *dst_sys_ptr,
      34         1963723 :                                   uintptr_t      src_usr_addr,
      35         1963723 :                                   size_t         num_bytes) {
      36         1963723 :   uintptr_t src_sys_addr;
      37                 : 
      38         1963723 :   src_sys_addr = NaClUserToSysAddrRange(nap, src_usr_addr, num_bytes);
      39         1963723 :   if (kNaClBadAddress == src_sys_addr) {
      40               0 :     return 0;
      41                 :   }
      42                 : 
      43         5891169 :   memcpy((void *) dst_sys_ptr, (void *) src_sys_addr, num_bytes);
      44         1963723 :   NaClCopyDropLock(nap);
      45                 : 
      46         1963723 :   return 1;
      47         1963723 : }
      48                 : 
      49             238 : int NaClCopyInFromUserZStr(struct NaClApp *nap,
      50             238 :                            char           *dst_buffer,
      51             238 :                            size_t         dst_buffer_bytes,
      52             238 :                            uintptr_t      src_usr_addr) {
      53             238 :   uintptr_t src_sys_addr;
      54                 : 
      55             714 :   CHECK(dst_buffer_bytes > 0);
      56             238 :   src_sys_addr = NaClUserToSysAddr(nap, src_usr_addr);
      57             238 :   if (kNaClBadAddress == src_sys_addr) {
      58               1 :     dst_buffer[0] = '\0';
      59               1 :     return 0;
      60                 :   }
      61             237 :   NaClCopyTakeLock(nap);
      62             711 :   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             238 : }
      72                 : 
      73                 : 
      74          737986 : int NaClCopyOutToUser(struct NaClApp  *nap,
      75          737986 :                       uintptr_t       dst_usr_addr,
      76          737986 :                       void            *src_sys_ptr,
      77          737986 :                       size_t          num_bytes) {
      78          737986 :   uintptr_t dst_sys_addr;
      79                 : 
      80          737986 :   dst_sys_addr = NaClUserToSysAddrRange(nap, dst_usr_addr, num_bytes);
      81          737986 :   if (kNaClBadAddress == dst_sys_addr) {
      82               1 :     return 0;
      83                 :   }
      84          737985 :   NaClCopyTakeLock(nap);
      85         2213955 :   memcpy((void *) dst_sys_addr, src_sys_ptr, num_bytes);
      86          737985 :   NaClCopyDropLock(nap);
      87                 : 
      88          737985 :   return 1;
      89          737986 : }

Generated by: LCOV version 1.7