python / python/cpython

PyMemoryView_FromBuffer discards owner reference from Py_buffer

Aberta
#148,493 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

interpreter-core topic-C-API type-bug
Linguagem predominante
Python
Estrelas
77.2k
Forks
35.9k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

Bug report

Bug description:

https://github.com/python/cpython/blob/0274d8304e5eec23de100d827eb4da06ab7fd8aa/Objects/memoryobject.c#L769-L788

This means that if you use PyMemoryView_FromBuffer with a buffer that requires an owner to be kept alive, you get a UAF hazard here.

This is not mentioned in the documentation: https://docs.python.org/3/c-api/memoryview.html#c.PyMemoryView_FromBuffer

An extremely cursory didn't find any vulnerable callers within CPython itself, however this was discovered in the process of implementing https://github.com/PyO3/pyo3/pull/5937 where it definitely would have been an issue.

It seems like there's two possible choices here:

  • Change this to keep owner around -- potentially breaks existing callers?
  • Document this, and introduce a new API with clearer semantics here.
CPython versions tested on:

CPython main branch

Operating systems tested on:

No response

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece por Objects/memoryobject.c, na implementação vinculada de PyMemoryView_FromBuffer, e leia a documentação da C-API de PyMemoryView_FromBuffer. Revise o pull request #5937 do PyO3 para entender o requisito de tempo de vida do owner e, em seguida, compare as implicações de compatibilidade de manter o owner com as de introduzir uma nova API. O trabalho estará concluído quando a semântica de ownership estiver decidida, documentada e coberta por testes apropriados do CPython.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
c, python
Domínio
api
Tipo de issue
Bug
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Pouca atividade
Clareza
Razoavelmente clara
Facilidade para iniciantes
38/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.