bzero(3) Library Functions Manual bzero(3) NOME bzero, explicit_bzero - zera uma string de bytes BIBLIOTECA Biblioteca C Padrao (libc, -lc) SINOPSE #include void bzero(void s[.n], size_t n); #include void explicit_bzero(void s[.n], size_t n); DESCRICAO A funcao bzero() apaga os dados nos n bytes do inicio da memoria no local apontado por s, escrevendo zeros (bytes contendo '\0') naquela area. A funcao explicit_bzero() realiza a mesma tarefa que bzero(). A diferenca para bzero() e que ela garante que as organizacoes de compilador nao vao remover a operacao de apagar se o compilar deduzir que a operacao e "desnecessaria". VALOR DE RETORNO Nenhum. ATRIBUTOS Para uma explicacao dos termos usados nesta secao, consulte attributes(7). +--------------------------------------------+---------------+---------+ |Interface | Atributo | Valor | +--------------------------------------------+---------------+---------+ |bzero(), explicit_bzero() | Thread safety | MT-Safe | +--------------------------------------------+---------------+---------+ PADROES Nenhum. HISTORICO explicit_bzero() glibc 2.25. A funcao explicit_bzero() e uma extensao nao padrao que e apresentada em alguns BSDs. Outras implementacoes possuem uma funcao similar, como memset_explicit() ou memset_s(). bzero() 4.3BSD. Marked as LEGACY in POSIX.1-2001. Removed in POSIX.1-2008. NOTAS A funcao explicit_bzero() resolve um problema que aplicativos preocupados com seguranca podem encontrar ao usar bzero(): se o compilador puder deduzir que o local a ser zerado nunca mais sera tocado por um programa correto, podera remover a chamada bzero() por completo. Esse e um problema se a intencao da chamada bzero() era apagar dados confidenciais (por exemplo, senhas) para evitar a possibilidade de os dados vazarem por um programa incorreto ou comprometido. As chamadas para explicit_bzero() nunca sao otimizadas pelo compilador. A funcao explicit_bzero() nao resolve todos os problemas associados com apagar dados sensiveis: o A funcao explicit_bzero() nao garante que os dados confidenciais sejam completamente apagados da memoria. (O mesmo acontece com bzero().) Por exemplo, pode haver copias dos dados confidenciais em um registro e em areas de pilhas "scratch". A funcao explicit_bzero() nao esta ciente dessas copias e nao pode apaga-las. o Em algumas circunstancias, explicit_bzero() posso diminuir a seguranca. Se o compilador determinou que a variavel que contem os dados confidenciais poderia ser otimizada para ser armazenada em um registro (porque ela e pequena o suficiente para caber em um registro, e nenhuma operacao alem da chamada explicit_bzero() precisaria executar o comando endereco da variavel), a chamada de explicit_bzero() forca os dados a serem copiados do registro para um local na RAM que e imediatamente apagado (enquanto a copia no registro permanece inalterada). O problema aqui e que e mais provavel que os dados na RAM sejam expostos por um bug do que os dados em um registro e, portanto, a chamada explicit_bzero() cria uma breve janela de tempo em que os dados confidenciais sao mais vulneraveis do que seriam. se nenhuma tentativa tivesse sido feita para apagar os dados. Observe que declarar a variavel sensivel com o qualificador volatile nao nao elimina os problemas acima. De fato, isso os tornara piores, pois, por exemplo, pode forcar uma variavel que de outra forma seria otimizada em um registro a ser mantida na RAM (mais vulneravel) por toda a sua vida util. Nao obstante os detalhes acima, para aplicativos preocupados com a seguranca, usar explicit_bzero() em vez de nao usa-lo e geralmente preferivel. Os desenvolvedores do explicit_bzero() antecipam que futuros compiladores reconhecam chamadas a explicit_bzero() e tomem medidas para garantir que todas as copias dos dados sigilosos sejam apagadas, incluindo copias em registradores ou em areas de pilhas "scratch". VEJA TAMBEM bstring(3), memset(3), swab(3) TRADUCAO A traducao para portugues brasileiro desta pagina man foi criada por Paulo Cesar Mendes , Andre Luiz Fassone e Rafael Fontenelle . Esta traducao e uma documentacao livre; leia a Licenca Publica Geral GNU Versao 3 ou posterior para as condicoes de direitos autorais. Nenhuma responsabilidade e aceita. Se voce encontrar algum erro na traducao desta pagina de manual, envie um e-mail para a lista de discussao de tradutores . Linux man-pages 6.06 31 outubro 2023 bzero(3)