Algum patch já foi aplicado ao meu kernel Linux?
Se alguém estiver confortável o suficiente com o Linux para aplicar um patch, como parece ser esse questionador, então verificar se o patch já está no kernel padrão é relativamente simples: Basta verificar o código-fonte.
Use a Fonte, Luke! ¹
O seguinte deve funcionar para qualquer distribuição derivada do Debian GNU / Linux, que inclui o que o questionador pediu, Ubuntu:
apt source linux
Isso fará o download do código fonte do Linux e corrigirá-o para ser exatamente o mesmo estado da distribuição usada quando compilado. No diretório linux-x.y.z estão os arquivos mencionados no patch. Basta olhar para os números das linhas e certificar-se de que as linhas com sinais de menos não estão lá e as que estão com sinais de mais. É isso.
Resposta mais detalhada
Patches são arquivos de texto que se parecem com isso:
Signed-off-by: Alexey Brodkin <[email protected]>
---
drivers/usb/core/urb.c | 5 -----
1 file changed, 5 deletions(-)
--- a/drivers/usb/core/urb.c
+++ b/drivers/usb/core/urb.c
@@ -321,9 +321,6 @@ EXPORT_SYMBOL_GPL(usb_unanchor_urb);
*/
int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
{
- static int pipetypes[4] = {
- PIPE_CONTROL, PIPE_ISOCHRONOUS, PIPE_BULK, PIPE_INTERRUPT
- };
int xfertype, max;
struct usb_device *dev;
struct usb_host_endpoint *ep;
@@ -441,11 +438,6 @@ int usb_submit_urb(struct urb *urb, gfp_
* cause problems in HCDs if they get it wrong.
*/
- /* Check that the pipe's type matches the endpoint's type */
- if (usb_pipetype(urb->pipe) != pipetypes[xfertype])
- dev_WARN(&dev->dev, "BOGUS urb xfer, pipe %x != type %x\n",
- usb_pipetype(urb->pipe), pipetypes[xfertype]);
-
/* Check against a simple/standard policy */
allowed = (URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT | URB_DIR_MASK |
URB_FREE_BUFFER);
Normalmente, usa-se o programa patch
para aplicar os arquivos de patch ao código-fonte antes de compilá-lo, mas, para essa pergunta, pode não valer a pena. Pode-se rapidamente examinar apenas um patchpile e ver o nome do arquivo e os números de linha na parte superior e depois abrir um editor de texto (neste exemplo, emacs +321 drivers/usb/core/urb.c
). Uma rápida olhada é tudo o que é preciso saber. (Os sinais de subtração marcam as linhas que devem ser excluídas e os sinais de adição, adicionados).
Mas, talvez seja uma boa ideia executar patch
Por outro lado, se alguém planeja recompilar o Linux, não é uma má idéia começar do kernel padrão da distribuição. Nesse caso, não há motivo para não tentar executar patch
. O programa é inteligente o suficiente para reconhecer se o patch já foi aplicado e perguntar ao operador se talvez ele queira reverter isso.
Exemplo de execução de patch (anteriormente sem correção)
Aqui está um exemplo do que parece em um patch que não estava no kernel padrão:
$ patch -p1 < foo.patch
patching file drivers/usb/core/urb.c
Hunk #1 succeeded at 323 (offset 2 lines).
Hunk #2 succeeded at 440 (offset 2 lines).
Se for bem-sucedido, o padrão da distribuição não foi corrigido e precisa ser recompilado. Felizmente, o código-fonte do Linux agora está convenientemente ali, com o patch aplicado.
Exemplo de execução de patch (corrigido anteriormente)
E aqui está o que seria se o kernel padrão da distribuição já tivesse sido corrigido:
$ patch -p1 < foo.patch
patching file drivers/usb/core/urb.c
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
2 out of 2 hunks ignored -- saving rejects to file drivers/usb/core/urb.c.rej
"Inversa ou aplicada anteriormente" significa que nada mais precisa ser feito, pois o kernel padrão já foi corrigido.
Nota de rodapé ¹ Desculpe pelo trocadilho, mas não me culpe por isso; esse foi o encorajamento que me foi ensinado há muito tempo atrás pelos gurus do UNIX, sábios nos caminhos da Fonte. Eles disseram que quando a Fonte está com você, você se torna mais poderoso do que qualquer fornecedor proprietário poderia imaginar.