O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

BoundsSanitizer

BoundsSanitizer (BoundSan) adiciona instrumentação a binários para inserir verificações de limites em torno de acessos de array. Essas verificações são adicionadas se o compilador não puder provar em tempo de compilação que o acesso será seguro e se o tamanho do array for conhecido em tempo de execução, para que possa ser verificado. O Android 10 implanta BoundSan em Bluetooth e codecs. BoundSan é fornecido pelo compilador e é ativado por padrão em vários componentes em toda a plataforma.

Implementação

BoundSan usa o desinfetante de limites do UBSan . Essa mitigação é ativada em um nível por módulo. Ajuda a manter seguros os componentes essenciais do Android e não deve ser desativado.

Recomendamos que você habilite o BoundSan para componentes adicionais. Os candidatos ideais são código nativo privilegiado ou código nativo complexo que analisa a entrada de usuário não confiável. A sobrecarga de desempenho associada à habilitação do BoundSan depende do número de acessos à matriz que não podem ser comprovados como seguros. Espere uma pequena porcentagem de sobrecarga em média e teste se o desempenho é uma preocupação.

Ativando BoundSan em arquivos de blueprint

BoundSan pode ser ativado em arquivos de blueprint adicionando "bounds" à propriedade misc_undefined sanitize para módulos binários e de biblioteca:

sanitize: {
   misc_undefined: ["bounds"],
   diag: {
      misc_undefined: ["bounds"],
   },
   blacklist: "modulename_blacklist.txt",

diag

A propriedade diag ativa o modo de diagnóstico para os higienizadores. Use o modo de diagnóstico apenas durante o teste. O modo de diagnóstico não aborta em estouros, o que nega a vantagem de segurança da mitigação e carrega uma sobrecarga de desempenho mais alta, portanto, não é recomendado para compilações de produção.

lista negra

A propriedade blacklist permite a especificação de um arquivo de lista negra que os desenvolvedores podem usar para evitar que funções e arquivos de origem sejam limpos. Use esta propriedade apenas se o desempenho for uma preocupação e os arquivos / funções de destino contribuírem substancialmente. Audite manualmente esses arquivos / funções para garantir que os acessos à matriz sejam seguros. Consulte Solução de problemas para obter detalhes adicionais.

Ativando BoundSan em makefiles

BoundSan pode ser habilitado em makefiles adicionando "bounds" à variável LOCAL_SANITIZE para módulos binários e de biblioteca:

LOCAL_SANITIZE := bounds
# Optional features
LOCAL_SANITIZE_DIAG := bounds
LOCAL_SANITIZE_BLACKLIST := modulename_blacklist.txt

LOCAL_SANITIZE aceita uma lista de desinfetantes separados por uma vírgula.

LOCAL_SANITIZE_DIAG ativa o modo de diagnóstico. Use o modo de diagnóstico apenas durante o teste. O modo de diagnóstico não aborta em estouros, o que nega a vantagem de segurança da mitigação e carrega uma sobrecarga de desempenho mais alta, portanto, não é recomendado para compilações de produção.

LOCAL_SANITIZE_BLACKLIST permite a especificação de um arquivo de lista negra que permite aos desenvolvedores impedir que funções e arquivos de origem sejam limpos. Use esta propriedade apenas se o desempenho for uma preocupação e os arquivos / funções de destino contribuírem substancialmente. Audite manualmente esses arquivos / funções para garantir que os acessos à matriz sejam seguros. Consulte Solução de problemas para obter detalhes adicionais.

Desativando BoundSan

Você pode desativar o BoundSan em funções e arquivos de origem com listas negras ou atributos de função. É melhor manter o BoundSan ativado, portanto, desative-o apenas se a função ou o arquivo estiver criando uma grande sobrecarga de desempenho e a fonte tiver sido revisada manualmente.

Para obter mais informações sobre como desabilitar BoundSan com atributos de função e formatação de arquivo de lista negra , consulte a documentação do Clang LLVM. Defina a lista negra para o sanitizador específico usando nomes de seção que especificam o sanitizante de destino para evitar o impacto de outros sanitizantes.

Validação

Não há teste CTS específico para BoundSan. Em vez disso, certifique-se de que os testes CTS sejam aprovados com ou sem BoundSan habilitado para verificar se ele não está afetando o dispositivo.

Solução de problemas

Teste completamente os componentes após habilitar o BoundSan para garantir que todos os acessos fora dos limites não detectados anteriormente sejam resolvidos.

Os erros do BoundSan podem ser facilmente identificados, pois incluem a seguinte mensagem de cancelamento de marca para exclusão:

pid: ###, tid: ###, name: Binder:###  >>> /system/bin/foobar <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'ubsan: out-of-bounds'

Ao executar no modo de diagnóstico, o arquivo de origem, o número da linha e o valor do índice são impressos no logcat . Por padrão, este modo não lança uma mensagem de aborto. Revise o logcat para verificar se há erros.

external/foo/bar.c:293:13: runtime error: index -1 out of bounds for type 'int [24]'