
Árvore de fonte do kernel Linux 3.0.35 com foco em CVE-2019-10220, fornecendo referência para análise de vulnerabilidades e pesquisa de exploração.
Linux kernel release 3.x http://kernel.org/
Estas são as notas de lançamento da versão 3 do kernel Linux. Leia-as com atenção, pois elas explicam o que é isto, como instalar o kernel e o que fazer se algo der errado.
O QUE É O LINUX?
O Linux é um clone do sistema operacional Unix, escrito do zero por Linus Torvalds com a ajuda de uma equipe informal de hackers em toda a Internet. Ele busca conformidade com POSIX e Single UNIX Specification.
Ele possui todos os recursos que você esperaria de um Unix moderno e completo, incluindo multitarefa real, memória virtual, bibliotecas compartilhadas, carregamento sob demanda, executáveis compartilhados com copy-on-write, gerenciamento adequado de memória e rede multicamadas incluindo IPv4 e IPv6.
Ele é distribuído sob a Licença Pública Geral GNU - veja o arquivo COPYING que acompanha para mais detalhes.
EM QUAL HARDWARE ELE FUNCIONA?
Embora originalmente desenvolvido para PCs baseados em x86 de 32 bits (386 ou superior), hoje o Linux também roda em (pelo menos) as arquiteturas Compaq Alpha AXP, Sun SPARC e UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, Cell, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64, AXIS CRIS, Xtensa, Tilera TILE, AVR32 e Renesas M32R.
O Linux é facilmente portável para a maioria das arquiteturas de propósito geral de 32 ou 64 bits desde que tenham uma unidade de gerenciamento de memória paginada (PMMU) e uma versão do compilador GNU C (gcc) (parte do GNU Compiler Collection, GCC). O Linux também foi portado para várias arquiteturas sem PMMU, embora a funcionalidade seja obviamente um pouco limitada. O Linux também foi portado para si mesmo. Você agora pode executar o kernel como uma aplicação no espaço do usuário - isso é chamado de UserMode Linux (UML).
DOCUMENTAÇÃO:
Há muita documentação disponível tanto em formato eletrônico na Internet quanto em livros, tanto específicos do Linux quanto sobre questões gerais do UNIX. Recomendo olhar os subdiretórios de documentação em qualquer site FTP do Linux para os livros do LDP (Linux Documentation Project). Este README não pretende ser documentação sobre o sistema: existem fontes muito melhores disponíveis.
Existem vários arquivos README no subdiretório Documentation/: eles geralmente contêm notas de instalação específicas do kernel para alguns drivers, por exemplo. Veja Documentation/00-INDEX para uma lista do que está contido em cada arquivo. Por favor, leia o arquivo Changes, pois ele contém informações sobre os problemas que podem resultar ao atualizar seu kernel.
O subdiretório Documentation/DocBook/ contém vários guias para desenvolvedores e usuários do kernel. Esses guias podem ser renderizados em vários formatos: PostScript (.ps), PDF, HTML e páginas de manual, entre outros. Após a instalação, "make psdocs", "make pdfdocs", "make htmldocs" ou "make mandocs" renderizarão a documentação no formato solicitado.
INSTALANDO o código-fonte do kernel:
Se você instalar os fontes completos, coloque o tarball do kernel em um diretório onde você tenha permissões (por exemplo, seu diretório home) e descompacte-o:
gzip -cd linux-3.X.tar.gz | tar xvf -
ou bzip2 -dc linux-3.X.tar.bz2 | tar xvf -
Substitua "XX" pelo número da versão do kernel mais recente.
NÃO use a área /usr/src/linux! Esta área tem um conjunto (geralmente incompleto) de cabeçalhos do kernel que são usados pelos arquivos de cabeçalho da biblioteca. Eles devem corresponder à biblioteca e não devem ser bagunçados por qualquer que seja o kernel-do-dia.
Você também pode atualizar entre versões 3.x através de patches. Os patches são distribuídos no formato gzip tradicional e no formato bzip2 mais recente. Para instalar via patches, obtenha todos os arquivos de patch mais recentes, entre no diretório de nível superior do código-fonte do kernel (linux-3.x) e execute:
gzip -cd ../patch-3.x.gz | patch -p1
ou bzip2 -dc ../patch-3.x.bz2 | patch -p1
(repita xx para todas as versões maiores que a versão da sua árvore de fontes atual, em ordem) e você deve estar bem. Você pode querer remover os arquivos de backup (xxx~ ou xxx.orig) e garantir que não haja patches com falha (xxx# ou xxx.rej). Se houver, ou você ou eu cometemos um erro.
Ao contrário dos patches para os kernels 3.x, os patches para os kernels 3.x.y (também conhecidos como kernels -stable) não são incrementais, mas sim aplicados diretamente ao kernel base 3.x. Por favor, leia Documentation/applying-patches.txt para mais informações.
Alternativamente, o script patch-kernel pode ser usado para automatizar esse processo. Ele determina a versão atual do kernel e aplica quaisquer patches encontrados.
linux/scripts/patch-kernel linux
O primeiro argumento no comando acima é a localização do código-fonte do kernel. Os patches são aplicados a partir do diretório atual, mas um diretório alternativo pode ser especificado como o segundo argumento.
Se você estiver atualizando entre versões usando os patches da série estável (por exemplo, patch-3.x.y), observe que esses "lançamentos pontuais" não são incrementais e devem ser aplicados à árvore base 3.x. Por exemplo, se seu kernel base é 3.0 e você deseja aplicar o patch 3.0.3, você não aplica e, de fato, não deve aplicar primeiro os patches 3.0.1 e 3.0.2. Da mesma forma, se você estiver executando a versão do kernel 3.0.2 e quiser pular para 3.0.3, você deve primeiro reverter o patch 3.0.2 (isto é, patch -R) antes de aplicar o patch 3.0.3. Você pode ler mais sobre isso em Documentation/applying-patches.txt
Certifique-se de que não há arquivos .o obsoletos e dependências espalhadas:
cd linux
make mrproper
Agora você deve ter os fontes corretamente instalados.
REQUISITOS DE SOFTWARE
Compilar e executar os kernels 3.x requer versões atualizadas de vários pacotes de software. Consulte Documentation/Changes para os números de versão mínimos necessários e como obter atualizações para esses pacotes. Cuidado: usar versões excessivamente antigas desses pacotes pode causar erros indiretos que são muito difíceis de rastrear, então não presuma que você pode simplesmente atualizar os pacotes quando problemas óbvios surgirem durante a compilação ou operação.
DIRETÓRIO DE BUILD para o kernel:
Ao compilar o kernel, todos os arquivos de saída serão, por padrão, armazenados junto com o código-fonte do kernel. Usar a opção "make O=output/dir" permite especificar um local alternativo para os arquivos de saída (incluindo .config). Exemplo: código-fonte do kernel: /usr/src/linux-3.N diretório de build: /home/name/build/kernel
Para configurar e compilar o kernel use: cd /usr/src/linux-3.N make O=/home/name/build/kernel menuconfig make O=/home/name/build/kernel sudo make O=/home/name/build/kernel modules_install install
Por favor, observe: Se a opção 'O=output/dir' for usada, ela deve ser usada para todas as invocações do make.
CONFIGURANDO o kernel:
Não pule esta etapa, mesmo que você esteja apenas atualizando uma versão menor. Novas opções de configuração são adicionadas em cada versão, e problemas estranhos aparecerão se os arquivos de configuração não estiverem configurados como esperado. Se você quiser carregar sua configuração existente para uma nova versão com o mínimo de trabalho, use "make oldconfig", que apenas perguntará as respostas para novas perguntas.