25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync/* $Id$ */
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync/** @file
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * IPRT - RTMemWipeThoroughly.
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync */
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync/*
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * Copyright (C) 2008-2010 Oracle Corporation
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync *
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * available from http://www.virtualbox.org. This file is free software;
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * you can redistribute it and/or modify it under the terms of the GNU
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * General Public License (GPL) as published by the Free Software
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync *
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * The contents of this file may alternatively be used under the terms
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * of the Common Development and Distribution License Version 1.0
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * VirtualBox OSE distribution, in which case the provisions of the
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * CDDL are applicable instead of those of the GPL.
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync *
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * You may elect to license modified versions of this file under the
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync * terms and conditions of either the GPL or the CDDL or both.
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync */
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync/*******************************************************************************
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync* Header Files *
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync*******************************************************************************/
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync#include <iprt/mem.h>
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync#include "internal/iprt.h"
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync#include <iprt/asm.h>
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync#include <iprt/rand.h>
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync#include <iprt/string.h>
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsyncRTDECL(void) RTMemWipeThoroughly(void *pv, size_t cb, size_t cMinPasses) RT_NO_THROW
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync{
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync size_t cPasses = RT_MIN(cMinPasses, 6);
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync do
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync {
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync memset(pv, 0xff, cb);
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync ASMMemoryFence();
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync memset(pv, 0x00, cb);
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync ASMMemoryFence();
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync RTRandBytes(pv, cb);
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync ASMMemoryFence();
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync } while (cPasses-- > 0);
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync}
25a51c3daa0b67e0be71df61729f5bd9e0a3543cvboxsync