Jon Whitney’s men registered their first clean sheet in five matches and extended their unbeaten run to four games, but neither side could manage the crucial finish to grab all three points.
Steve Morison and Joe Edwards had the best chances in the match, but the teams shared the spoils and Walsall remain 12th in League One.
The Lions could have grabbed an early lead after Tony Craig’s teasing cross found Jed Wallace, but he headed well off target.
Walsall then failed to clear a Millwall attack, and Lee Gregory sent his volley over when the ball fell to him around the penalty spot.
Erhun Oztumer and Florent Cuvelier both tried their luck from distance and, while the Belgian got his strike on target, it lacked the power to trouble goalkeeper Jordan Archer.
Matt Preston blocked shots from Gregory and Lee Thompson in quick succession as the hosts continued to threaten.
But the Saddlers had begun to get a foothold in the game – Cuvelier’s volley was charged down after a prolonged spell of Walsall possession.
Moments later Steve Morison latched onto Shane Ferguson’s ball, and sent his stooping header just wide.
Morison then saw another good chance when Ben Thompson’s cross evaded Neil Etheridge, however the striker was unsighted so the ball only hit him and dropped wide.
Half-Time: Millwall 0-0 Walsall
The Saddlers started well in the second period, Amadou Bakayoko holding up the ball for Joe Edwards.
The wing-back was surging forward to join the attack but sliced his shot wide.
The contest remained tight with both sides cancelling each other out throughout the second half.
Substitute Aiden O’Brien’s effort that cleared the crossbar provided a rare sight of goal for either side, and Kieron Morris also tried his luck to no avail.
Morison had a chance to win it at the death, but his touch was heavy and the Saddlers were able to swarm in and scramble the ball clear.
In the end Whitney’s side had to settle for a point with a home clash against Northampton Town to come on Saturday.
Full-Time: Millwall 0-0 Walsall
Team: Etheridge, Preston, O’Connor, O’Connell, McCarthy, Chambers, Osbourne, Cuvelier (Morris 78’), Edwards, Oztumer (Randall 84’), Bakayoko (Jackson 69’).
Subs not used: MacGillivray, Laird, Dobson, Makris.