https://github.com/torvalds/linux
Revision 3ba41621156681afcdbcd624e3191cbc65eb94f4 authored by Ben Hutchings on 23 April 2011, 17:42:56 UTC, committed by Linus Torvalds on 24 April 2011, 15:24:31 UTC
Commit 40aee729b350 ('kconfig: fix default value for choice input')
fixed some cases where kconfig would select the wrong option from a
choice with a single valid option and thus enter an infinite loop.

However, this broke the test for user input of the form 'N?', because
when kconfig selects the single valid option the input is zero-length
and the test will read the byte before the input buffer.  If this
happens to contain '?' (as it will in a mips build on Debian unstable
today) then kconfig again enters an infinite loop.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: stable@kernel.org [2.6.17+]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 686c4cb
Raw File
Tip revision: 3ba41621156681afcdbcd624e3191cbc65eb94f4 authored by Ben Hutchings on 23 April 2011, 17:42:56 UTC
kconfig: Avoid buffer underrun in choice input
Tip revision: 3ba4162
Makefile
#
# kbuild file for usr/ - including initramfs image
#

klibcdirs:;
PHONY += klibcdirs


# Gzip
suffix_$(CONFIG_INITRAMFS_COMPRESSION_GZIP)   = .gz

# Bzip2
suffix_$(CONFIG_INITRAMFS_COMPRESSION_BZIP2)  = .bz2

# Lzma
suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZMA)   = .lzma

# XZ
suffix_$(CONFIG_INITRAMFS_COMPRESSION_XZ)     = .xz

# Lzo
suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZO)   = .lzo

AFLAGS_initramfs_data.o += -DINITRAMFS_IMAGE="usr/initramfs_data.cpio$(suffix_y)"

# Generate builtin.o based on initramfs_data.o
obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o

# initramfs_data.o contains the compressed initramfs_data.cpio image.
# The image is included using .incbin, a dependency which is not
# tracked automatically.
$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio$(suffix_y) FORCE

#####
# Generate the initramfs cpio archive

hostprogs-y := gen_init_cpio
initramfs   := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh
ramfs-input := $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)), \
			$(shell echo $(CONFIG_INITRAMFS_SOURCE)),-d)
ramfs-args  := \
        $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
        $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID))

# .initramfs_data.cpio.d is used to identify all files included
# in initramfs and to detect if any files are added/removed.
# Removed files are identified by directory timestamp being updated
# The dependency list is generated by gen_initramfs.sh -l
ifneq ($(wildcard $(obj)/.initramfs_data.cpio.d),)
	include $(obj)/.initramfs_data.cpio.d
endif

quiet_cmd_initfs = GEN     $@
      cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)

targets := initramfs_data.cpio.gz initramfs_data.cpio.bz2 initramfs_data.cpio.lzma initramfs_data.cpio.xz initramfs_data.cpio.lzo initramfs_data.cpio
# do not try to update files included in initramfs
$(deps_initramfs): ;

$(deps_initramfs): klibcdirs
# We rebuild initramfs_data.cpio if:
# 1) Any included file is newer then initramfs_data.cpio
# 2) There are changes in which files are included (added or deleted)
# 3) If gen_init_cpio are newer than initramfs_data.cpio
# 4) arguments to gen_initramfs.sh changes
$(obj)/initramfs_data.cpio$(suffix_y): $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
	$(Q)$(initramfs) -l $(ramfs-input) > $(obj)/.initramfs_data.cpio.d
	$(call if_changed,initfs)

back to top