Chances are this is the most frequently asked question (in some form or another), but unfortunately, there is no answer that will "just work(tm)". In general, you will need to have the kernel source package matching the running kernel installed. In this context, "matching" means that the version must be identical, but it also means that the kernel source tree must be configured correctly, i.e. using the same kernel configuration file used to build the running kernel.
Since distributors usually take care of this using more or less sophisticated mechanisms or packaging, users typically only need to locate and install the correct kernel source package. Unfortunately, this doesn't always work. In this case, it seems that the 2.4.20-20.9 source tree has gotten into a funny state somehow (there seems to be a problem related to modversions).
RedHat ships the kernel configuration files for their different kernel variants (i586, i686, UP/SMP, ...) in a configs/ directory (relative to the top-level kernel source directory); you could try to locate the correct configuration file for the running kernel (uname -a, /proc/version) and reconfigure the kernel source tree using something like make mrproper; cp configs/config-... .config; make oldconfig depend clean (where config-... is the correct configuration file).