Why bother with dynamic padding and a back pointer? That wastes at least 8 bytes.
You might as well always align to 8 bytes and make your header a multiple of 8.
The back pointer could also be a 1 byte number giving the size of the padding.
The back pointer could also be a 1 byte number giving the size of the padding.