Peavy (7-5) ended a four-start losing streak while giving up a run on five hits in 7 1/3.
Chicago took the lead with a three-run fifth that included RBI singles from Alexei Ramirez and Kevin Youkilis. A.J. Pierzynski hit a solo homer in the sixth for the White Sox, who won their fourth straight.
Adam Lind homered for the Blue Jays in the first and they could not score again until Yunel Escobar delivered a sacrifice fly in the ninth off closer Addison Reed.
Reed, however, still picked up his 13th save.
Aaron Laffey (0-1), making his third start in a Toronto uniform, gave up four runs on eight hits in six innings. Laffey is in his sixth major league season and is playing for his fourth team.