LCOV - code coverage report
Current view: top level - lib/util - talloc_keep_secret.c (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 15 23 65.2 %
Date: 2024-04-21 15:09:00 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2019      Andreas Schneider <asn@samba.org>
       3             :  *
       4             :  * This program is free software: you can redistribute it and/or modify
       5             :  * it under the terms of the GNU General Public License as published by
       6             :  * the Free Software Foundation, either version 3 of the License, or
       7             :  * (at your option) any later version.
       8             :  *
       9             :  * This program is distributed in the hope that it will be useful,
      10             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12             :  * GNU General Public License for more details.
      13             :  *
      14             :  * You should have received a copy of the GNU General Public License
      15             :  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
      16             :  */
      17             : 
      18             : #include "replace.h"
      19             : #include <talloc.h>
      20             : #include "lib/util/fault.h"
      21             : #include "talloc_keep_secret.h"
      22             : 
      23      760970 : static int talloc_keep_secret_destructor(void *ptr)
      24             : {
      25       24383 :         int ret;
      26      760970 :         size_t size = talloc_get_size(ptr);
      27             : 
      28      760970 :         if (unlikely(size == 0)) {
      29           0 :                 return 0;
      30             :         }
      31             : 
      32      760970 :         ret = memset_s(ptr, size, 0, size);
      33      760970 :         if (unlikely(ret != 0)) {
      34           0 :                 char *msg = NULL;
      35           0 :                 int ret2;
      36           0 :                 ret2 = asprintf(&msg,
      37             :                                 "talloc_keep_secret_destructor: memset_s() failed: %s",
      38             :                                 strerror(ret));
      39           0 :                 if (ret2 != -1) {
      40           0 :                         smb_panic(msg);
      41             :                 } else {
      42           0 :                         smb_panic("talloc_keep_secret_destructor: memset_s() failed");
      43             :                 }
      44             :         }
      45             : 
      46      736587 :         return 0;
      47             : }
      48             : 
      49      778021 : void _talloc_keep_secret(void *ptr, const char *name)
      50             : {
      51       24392 :         size_t size;
      52             : 
      53      778021 :         if (unlikely(ptr == NULL)) {
      54             : #ifdef DEVELOPER
      55           0 :                 smb_panic("Invalid talloc pointer");
      56             : #endif
      57             :                 return;
      58             :         }
      59             : 
      60      778021 :         size = talloc_get_size(ptr);
      61      778021 :         if (unlikely(size == 0)) {
      62          56 :                 return;
      63             :         }
      64             : 
      65      777957 :         talloc_set_name_const(ptr, name);
      66      777957 :         talloc_set_destructor(ptr, talloc_keep_secret_destructor);
      67             : }

Generated by: LCOV version 1.14