Label: missing hardening report. This is not checksec output, not readelf output, and not a compiler log. No binary was built. No mitigation setting was changed. No tool was installed. Before a later report can count, it needs all four of these: 1. The file name and a hash of that exact file. 2. The operating system, the machine family, and the compiler version. 3. The exact compile and link flags. 4. The name and version of the tool that printed the report. Glossary for reading such a report later. These are manual roles, not results from this course. NX, in this lesson: a page can be marked so the processor is not asked to run instructions from it. The GNU linker manual's noexecstack keyword marks an object as not requiring an executable stack. The same manual has a keyword that marks an object as requiring one. This course does not ask you to request an executable stack. The GNU C Library uses PT_GNU_STACK, when that segment is present, in deciding whether to mark the stack non-executable. A non-executable stack can still be writable. A mark on the stack is not a mark on every page. Some machines do not separate a read permission from an execute permission. This course did not inspect one. Stack canary, in this lesson: GCC's -fstack-protector option emits a guard variable for functions with the objects that option covers, including buffers of at least 8 bytes and functions that call alloca, which requests dynamic allocation in the current stack frame. The guard is set on entry and checked on exit. The manual says a failed check prints an error and the program exits. Only variables actually allocated on the stack are considered. A value kept in a register is outside that check. The option does not check every function unless a broader variant is selected, and this course did not record which variant a distro uses by default. ASLR, in this lesson: the proc_sys_kernel manual describes a system policy, present since Linux 2.6.12 on architectures that support it, that selects address space layout randomization. This course does not ask you to read or write that policy. A layout that varies is not a length check. PIE, in this lesson: GCC's -fPIE compiles position-independent code that can be linked into an executable, and -pie asks the link to produce a position-independent executable on targets that support it. The GDB manual says such an executable is loaded at a randomly chosen address when randomization is in use. PIE without that runtime policy is not evidence that every run moved. This course did not check a distro compiler's default. Limit that applies to all four: none of them turns a write past a buffer into a correct write.